gpt4 book ai didi

java - 按自定义顺序对 Arraylist 进行排序

转载 作者:行者123 更新时间:2023-12-01 06:49:13 26 4
gpt4 key购买 nike

感谢您抽出时间:)

我有一段使用compareToIgnoreCase 对Arraylist 进行排序的代码。

Collections.sort(als,new Comparator<String>() {

@Override
public int compare(String o1, String o2) {
//I want to alter this part
int dif=o1.compareToIgnoreCase(o2);
return dif;
}


});

但我想按以下方式对数组列表进行排序:

输入:(任意顺序)

sherin
Sherin
SHERIN
bubBle
buBble
BUBBLE
heart
hEart
hEArt

输出:

BUBBLE
buBble
bubBle
hEArt
hEart
heart
SHERIN
Sherin
sherin

你能帮我解决这个问题吗?预先感谢:)

最佳答案

您的第一次尝试还不错,但您需要添加另一个比较,以防类似的不区分大小写的值来排序:

Stream.of("sherin", "Sherin", "SHERIN", "bubBle", "buBble", "BUBBLE", "heart", "hEart", "hEArt")
.sorted((s1, s2) -> {
int tmp = s1.compareToIgnoreCase(s2);
return tmp == 0 ?
s1.compareTo(s2) //Compare equivalent values based on the case (upper case first)
: tmp;
}).forEach(System.out::println);

提供给 Stream.sorted 的比较器与您的实现相同,但使用 lambda 表示法。

结果:

BUBBLE
buBble
bubBle
hEArt
hEart
heart
SHERIN
Sherin
sherin

编辑:感谢 Joop Eggen对于使用比较器装饰器的建议:

Comparator
.comparing(Function.identity(), String::compareToIgnoreCase)
.thenComparing(Function.identity(), String::compareTo);

这使用起来更干净,并给出相同的结果:

Stream.of("sherin", "Sherin", "SHERIN", "bubBle", "buBble", "BUBBLE", "heart", "hEart", "hEArt").sorted(
Comparator
.comparing(Function.identity(), String::compareToIgnoreCase)
.thenComparing(Function.identity(), String::compareTo)
).forEach(System.out::println);

我可以用这个符号做的更短的是:

Comparator.comparing((String s) ->.toLowerCase()).thenComparing(Function.identity())

关于java - 按自定义顺序对 Arraylist 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51075192/

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