- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个对象数组。每个对象都是一个客户记录,即客户 ID (int)、名字 (String)、姓氏 (String) 和余额 (double)。
我的问题是我不应该有重复的客户记录,所以如果它们在文件中出现两次,我必须更新他们的余额。我不知道如何搜索数组来确定是否需要更新余额或在数组中创建新记录。
我觉得我应该在 get/setter 中执行此操作,但我不太确定。
编辑:澄清“如果他们在文件中出现两次,我必须更新他们的余额。”我有一个在记事本中制作的文件,它应该是一个客户列表,其中包含他们的所有信息。如果同一个客户出现两次,比如第二天购买更多东西,我不应该为他们创建一个新对象,因为他们已经在数组中拥有一个对象和一个位置。相反,我应该获取他们花费的金额,并将其添加到现有对象中已有的余额中。
edit2:我想我应该给你一些我已经将值读入数组的代码。我基于我们在类里面所做的示例,但我们不必更新任何内容,只需将信息存储到数组中并在需要时打印它。
public CustomerList(){
data = new CustomerRecord[100]; //i'm only allowed 100 unique customers
try {
Scanner input = new Scanner(new File("Records.txt"));
for(int i = 0; i < 100; ++i){
data[i] = new CustomerRecord();
data[i].setcustomerNumber(input.nextInt());
data[i].setfirstName(input.next());
data[i].setlastName(input.next());
data[i].setTransactionAmount(input.nextDouble());
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
最佳答案
在这种情况下,您不应该使用数组
。一个Set会更合适,因为根据定义,它没有重复的条目。
您需要做的是在 Customer
类中实现 equals()
和 hashCode()
方法,以便它们仅使用 id
(或 id
和 name
字段),而不使用 balance
。
如果由于某种原因您需要使用数组,您有两个选择:
它会是这样的:
public void updateOrAdd(Customer cst) {
boolean exists = false;
for(Customer existing : array) {
// !!! You need to implement your own equals method in the
// customer so it doesn't take into account the balance !!!
if(existing.equals(cst)) {
exists = true;
existing.updateBalance(cst.getBalance());
break;
}
}
if(!exists) {
// add the cst to the array
}
}
区别在于运行时,集合解的平均复杂度为常量 O(1)(除非您错误地实现了 hashCode()
方法)。
关于java - 如何在java中搜索对象数组然后更新对象的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29381755/
我是一名优秀的程序员,十分优秀!