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

时间:2018-07-24 17:36:20

标签: java arraylist

我在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()的实现。 如果月份和年份相等,则应仅返回一个列表对象。

3 个答案:

答案 0 :(得分:1)

假设您的equals实现正确,则应通过以下方式修改if语句以使用它:

...
if (!listOfIncomes.contains(incomesList.get(i))) 
{
    listOfIncomes.add(incomesList.get(i));
} 
...

我看到的另一个可疑之处是在equals实现中,尤其是以下行:

if (!super.equals(o)) return false;

尝试将其删除,然后重试。

答案 1 :(得分:1)

您必须更新if语句并以contains方法传递收入对象。 contains方法在内部调用equals方法。

 for (int i = 0; i < incomeList.size(); i++) { 
     if (!listOfIncomes.contains(incomesList.get(i)) {
                listOfIncomes.add(incomesList.get(i));
     }
 }

答案 2 :(得分:0)

Set<Income> uniqueSets = Sets.newHashSet(incomesList);应该可以解决问题。

只需确保以您期望逻辑工作的方式设置了equalshashCode方法。