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

标签 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() 实现。 如果月份和年份相等,它应该只返回一个列表对象。

最佳答案

假设您的 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/

相关文章:

java - 在新的执行线程中使用 catch throwable 或 catch Exception

android - 如何在 Android 中的 Listview 的 CustomListAdapter 类中捕获 Intent 的结果

c# - 将列表中的多个元素添加到数组

c - 将 C 语言中以逗号分隔的文件的矩阵输入转换为 2D

java - 使用正则表达式获得最佳小组比赛

java - 使用 servlet 显示系统属性

java - 随时间改变文字颜色

java - Java中是否有可以容纳4个或更多值的数据结构

java - Integer.parseInt 返回错误 : The method parseInt(String) in the type Integer is not applicable for the arguments (R. 字符串)

Java 系统范围的键盘快捷键