我有一个java对象数组。 像这样的事情
array = [{month: 6, year: 2018, amount: 242}, {month: 6, year: 2018, amount: 345}, {month: 7, year: 2018, amount: 4567}, {month: 7, year: 2018, amount: 1234}, {month: 8, year: 2018, amount: 211}]
所以我想创建一个没有重复的月份和年份键的新数组,所以这个新数组应该如下所示
newArray = [{month: 6, year: 2018}, {month: 7, year: 2018}, {month: 8, year: 2018}]
这是我实现的功能
private class IncomeArrayAdapter extends BaseAdapter {
private LayoutInflater inflater;
private List<Income> incomeList;
List<Income> listOfIncomes = new ArrayList<>();
public IncomeArrayAdapter(List<Income> incomesList) {
boolean found = false;
inflater = LayoutInflater.from(getActivity());
this.incomeList = incomesList;
for (int i = 0; i < incomeList.size(); i++) {
if (!listOfIncomes.contains(incomesList.get(i).month + incomesList.get(i).year)) {
listOfIncomes.add(incomesList.get(i));
}
}
}
所以我尝试过 hashCode() 和 equals() 函数,但我是 java 新手,但失败了。所以我希望有人可以帮助我并向我解释如何创建这个新数组?
编辑:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
if (!super.equals(o)) return false;
Income income = (Income) o;
return month == income.month &&
year == income.year;
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(), month, year);
}
这是我的 hashCode()
和 equals()
实现。
如果月份和年份相等,它应该只返回一个列表对象。
最佳答案
假设您的 equals
实现是正确的,您应该按以下方式修改 if 语句才能使用它:
...
if (!listOfIncomes.contains(incomesList.get(i)))
{
listOfIncomes.add(incomesList.get(i));
}
...
我看到的另一个可疑的事情是在 equals
实现中,特别是这一行:
if (!super.equals(o)) return false;
尝试删除它并重试。
关于java - 如何从现有数组创建没有重复元素的新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51504599/