gpt4 book ai didi

java - 使用自定义比较器对 ArrayList 进行排序

转载 作者:行者123 更新时间:2023-11-29 05:24:18 27 4
gpt4 key购买 nike

我正在尝试对 ArrayList<String> 进行排序使用自定义 Comparator .我的要求是 XX String 应该是第一个 String,其他的应该按照自然顺序。

I need : [XX, XX, 1, 5, 9, A, D, G, Q, Z]
What I am getting is [1, 5, 9, A, D, G, Q, Z, XX, XX]

以下是我的代码:

public class Test {
public static void main(String[] args)
{
List<String> list = new ArrayList<String>();
list.add("Z");
list.add("5");
list.add("D");
list.add("G");
list.add("XX");
list.add("9");
list.add("Q");
list.add("XX");
list.add("1");
list.add("A");
Collections.sort(list, new CustomComparator());
System.out.println(list);
}
}
class CustomComparator implements Comparator<String>
{
@Override
public int compare(String o1, String o2) {
if(o2.equals("XX")) {
return -1;
}
return o1.compareTo(o2);
}
}

编辑:如果我将比较器逻辑更改为:

@Override
public int compare(String o1, String o2) {
if(o2.equals("XX")) {
return 1;
}
return o1.compareTo(o2);
}

我得到:

[1, XX, 9, A, Q, XX, 5, D, G, Z]

请告诉我如何进行。提前致谢。

最佳答案

使用这个比较器实现:

@Override
public int compare(String o1, String o2) {
if(o2.equals("XX")) {
return o1.equals("XX") ? 0 : 1;
} else if (o1.equals("XX")) {
return -1;
}
return o1.compareTo(o2);
}

原因: 除了何时使用 -1 或 1 的问题之外,重要的是要保证 o1 和 o2 的所有可能元组的明确顺序,请参阅 javadoc :

[...]实现者必须确保所有 x 和 y 的 sgn(compare(x, y)) == -sgn(compare(y, x))。 (这意味着当且仅当 compare(y, x) 抛出异常时,compare(x, y) 必须抛出异常。)

实现者还必须确保关系是传递的:((compare(x, y)>0) && (compare(y, z)>0)) 意味着 compare(x, z)>0。[...]

关于java - 使用自定义比较器对 ArrayList<String> 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23296627/

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