gpt4 book ai didi

java - 如何使用比较器来查找重复项?

转载 作者:行者123 更新时间:2023-12-02 01:54:13 25 4
gpt4 key购买 nike

我是 Java 新手,尝试创建一个比较器,将对象从最小到最大排序,并且在出现重复的情况下,将它们发送到列表的末尾以获得类似 [1, 2] 的结果、3、1、2、3、1、2、3 等等]。但即使这个初始变体也不起作用!?我收到一个 ClassCastException,Integer 无法转换为 TestArr。哪里有错误呢?这是我的代码:

public class IntraArrayValuesComparison {
public static void main(String[] args) {
ArrayList<Integer> num1 = new ArrayList<Integer>();
num1.add(40);
num1.add(50);
num1.add(50);
num1.add(40);
num1.add(20);
num1.add(10);
num1.add(10);
num1.add(30);
num1.add(20);
num1.add(30);

Collections.sort(num1, new ArraysValuesCompare());
Iterator itr = num1.iterator();
while (itr.hasNext()) {
TestArr st = (TestArr)itr.next();
System.out.println(st.var);
}
System.out.println();
}
}

class TestArr {
int var;
TestArr (int var) {
this.var = var;
}
}

class ArraysValuesCompare implements Comparator{
public int compare (Object o1, Object o2){
TestArr a = (TestArr)o1;
TestArr b = (TestArr)o2;
if (a.var >= b.var)
return 0;
else
return 1;
}
}

最佳答案

你不能用比较器来做到这一点。

但是您可以对值进行排序,然后重新排列值,即重复将重复项移动到列表末尾,就像您所说的那样。

public static List<Integer> sortAscendingRepeated(Integer... values) {
List<Integer> list = new ArrayList<>(Arrays.asList(values));
Collections.sort(list);
for (int i = 1; i < list.size(); i++)
if (list.get(i).equals(list.get(i - 1)))
list.add(list.remove(i--));
return list;
}

测试

System.out.println(sortAscendingRepeated(40, 50, 50, 40, 20, 10, 10, 30, 20, 30));
System.out.println(sortAscendingRepeated(1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 5, 4));

输出

[10, 20, 30, 40, 50, 10, 20, 30, 40, 50]
[1, 2, 3, 4, 5, 1, 2, 3, 4, 1, 2, 3]

关于java - 如何使用比较器来查找重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52546739/

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