Java 如何从现有阵列创建新阵列而不使用重复元素
我有一个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}] 所以我想创建一个没有重复的月份和年份键的新数组,所以这个新数组应该如
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:Forcontains
要按您希望的方式工作,您应该向它传递一个收入
。看起来您传递的是字符串
或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;
,它对我很有效。你能删除这一行吗