gpt4 book ai didi

java - 删除属于同一组的数组元素,只留下组中的 1 个?

转载 作者:行者123 更新时间:2023-11-30 08:24:14 25 4
gpt4 key购买 nike

我有一个数组 myArray[]对象 MyThing其中包含 X 个元素。我需要删除属于同一组的元素,但为每个组留下一个代表。

MyThing类有一个字段 groupId

public class MyThing {

private int groupId;
//...other fields

public int getGroupId(){return groupId;}
//getter and setter
}

所以我必须比较groupId数组元素的整数值 ( myArray[x].getGroupId() ) 和删除除数组中第一个这样的元素之外属于同一组的所有元素

通过这种方式,我将获得一组唯一元素,其中只有 1 个来自同一组。例如,如果我有一个 a.getGroupId()=1, b.getGroupId()=2, c.getGroupId()=1 的数组纯化后,数组将仅包含 {a,b} , 和 c将被删除,因为它与 a 属于同一组.

因为这是自定义对象,所以我不能使用 Set<T> .

有什么想法吗?

附言。如果我解释清楚了,请告诉我,因为这有点令人困惑。

最佳答案

根据定义,集合不包含任何重复项。集合通过使用对象 equals()/compareTo(..) 方法或使用 Comparator 来确定两个项目是否相似。如果您只想要集合中的唯一项,那么实现 Comparable 接口(interface)并覆盖 equals() 就是您想要做的。但是在您的情况下,您只对独特组中的对象感兴趣,因此最好为这种情况创建一个自定义比较器,然后将其提供给集合,告诉它使用它,而不是“自然排序”。

Set<MyThing> myThings = new TreeSet<>(new Comparator<MyThing>() {
@Override
public int compare(MyThing o1, MyThing o2)
{
return o1.getGroupId() - o2.getGroupId();
}
});
myThings.addAll(Arrays.asList(myArray));

创建集合后,使用方便的方法 addAll(..) 将整个数组添加到其中。

(比较器如何对您的对象进行排序完全由您决定。)

关于java - 删除属于同一组的数组元素,只留下组中的 1 个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23093070/

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