gpt4 book ai didi

java - 如何从现有数组创建没有重复元素的新数组

转载 作者:行者123 更新时间:2023-12-02 02:01:32 25 4
gpt4 key购买 nike

我有一个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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com