Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从现有阵列创建新阵列而不使用重复元素_Java_Arraylist - Fatal编程技术网

Java 如何从现有阵列创建新阵列而不使用重复元素

Java 如何从现有阵列创建新阵列而不使用重复元素,java,arraylist,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}] 所以我想创建一个没有重复的月份和年份键的新数组,所以这个新数组应该如

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

Set uniqueSets=Set.newHashSet(incomesList)应该可以做到这一点

只需确保
equals
hashCode
方法的设置符合您期望的逻辑工作方式。

Set uniqueSets=Sets.newHashSet(incomesList)应该可以做到这一点


只要确保
equals
hashCode
方法按照您期望的逻辑工作方式进行设置。

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

...
if (!listOfIncomes.contains(incomesList.get(i))) 
{
    listOfIncomes.add(incomesList.get(i));
} 
...
我看到的另一个可疑之处是
equals
实现,特别是以下行:

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

请尝试删除它,然后重试。

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

...
if (!listOfIncomes.contains(incomesList.get(i))) 
{
    listOfIncomes.add(incomesList.get(i));
} 
...
我看到的另一个可疑之处是
equals
实现,特别是以下行:

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

请尝试删除它,然后重试。

您必须更新
方法中的if语句并传递income对象
包含
方法内部调用
等于
方法

 for (int i = 0; i < incomeList.size(); i++) { 
     if (!listOfIncomes.contains(incomesList.get(i)) {
                listOfIncomes.add(incomesList.get(i));
     }
 }
for(inti=0;i
您必须更新if语句,并在
包含
方法中传递income对象。
包含
方法内部调用
等于
方法

 for (int i = 0; i < incomeList.size(); i++) { 
     if (!listOfIncomes.contains(incomesList.get(i)) {
                listOfIncomes.add(incomesList.get(i));
     }
 }
for(inti=0;i
您当前的方法有什么问题?我在incomeList中有5个对象,ListoFinics返回相同的listhint:For
contains
要按您希望的方式工作,您应该向它传递一个
收入
。看起来您传递的是
字符串
int
(取决于
月份
年份
的类型)。我建议你的内容可能重复。重新定义你的类别
Income
扩展了新的抽象类别
AbstractIncome
,你把月份
和年
放在那里,你把
金额
放在
Income
类别你当前的方法有什么问题吗?我在incomeList a中有5个对象nd LISTOFINIMES返回相同的列表提示:
包含
要按您希望的方式工作,您应该向它传递一个
收入
。它看起来像是传递一个
字符串
整数
(取决于
的类型)1.我建议你的内容可能会重复。重新定义你的类
Income
扩展了新的抽象类
AbstractIncome
,你把
放在
收入
类别中,你把
金额
放在
收入
类别中。我已经用
hashCode
equals编辑了这个问题。您可以检查一下吗?您的
equals
hashcode
似乎只关心月份和年份。我只需要确保这些值是相同的。我会将
列表
转换为一个
,这将使所有值都是唯一的。如果有必要,请将其转换回或只返回
e你说了,但是仍然使用DuplicateSO获得相同的数组,那么你的
equals
和/或
hashCode
出现了问题。逐步检查调试程序中的值。我已经用我的
hashCode
equals
编辑了这个问题。你可以检查一下吗?你的
equals
hashCode
只有我需要关心月份和年份。我只需要确保这些值是相同的。我会将
列表
转换为一个
集合
,这将使所有的值都是唯一的。如果需要,然后将其转换回原来的值,或者像你所说的那样返回
集合
,但仍然使用重复项获得相同的数组,那么就出了问题您的
等于
和/或
hashCode
。逐步检查调试程序中的值显然,我的equals方法有问题,因为我要返回包含所有项的列表it@RubyDigger19你没有给contains方法提供
Income
对象。你改变了吗?我该怎么做?看看我发布的代码。有
incomesList.get(I)
作为参数。你在做某种附加。我有这个
incomesList.get(I)
但我不明白,我的equals方法有问题,因为我要返回包含所有项目的列表it@RubyDigger19你没有给contains方法提供
Income
对象。你改变了吗?我该怎么做?看看我发布的代码。有
incomesList.get(I)
作为参数。您正在进行某种附加。我有这个
incomesList.get(I)
但我没有it@RubyDigger19您正在传递
incomesList.get(i).月+incomesList.get(i).年
中包含的
方法您必须传递
收入对象->incomesList.get(i)
。我已经创建了这样的代码,但仍然得到了与原始数组相同的数组one@RubyDigger19我刚刚运行了代码,删除了if语句
if(!super.equals(o))return false;
,它对我很有效。你能删除这一行吗