我研究了流API,我有这个任务。我需要按长度顺序对List集合进行排序,如果几行的长度相同,请按字母顺序对其进行排序。
我的代码:
List<String> phones = new ArrayList<String>();
Collections.addAll(phones, "iPhone X", "Nokia 9", "Huawei Nexus 6P",
"Samsung Galaxy S8", "LG G6", "Xiaomi MI6", "Sony Xperia Z5",
"ASUS Zenfone 3", "Meizu Pro 6", "Heizu Pro 6",
"Pixel 2");
phones.stream().sorted(Comparator.comparingInt(String::length).reversed()).forEach(System.out::println);
我得到以下输出:
Samsung Galaxy S8
Huawei Nexus 6P
Sony Xperia Z5
ASUS Zenfone 3
Meizu Pro 6
Heizu Pro 6
Xiaomi MI6
iPhone X
Nokia 9
Pixel 2
LG G6
如您所见,
Sony Xperia Z5
ASUS Zenfone 3
行:
Meizu Pro 6
Heizu Pro 6
但是我的结果必须是:
Samsung Galaxy S8
Huawei Nexus 6P
ASUS Zenfone 3
Sony Xperia Z5
Heizu Pro 6
Meizu Pro 6
Xiaomi MI6
iPhone X
Nokia 9
Pixel 2
LG G6
如何改进我的代码,以便如果长度相同,则排序是按字母顺序进行的?
我们如何在列表>中收集结果?例如List <Pair <String, Long>
:
String a = Abcd;
list.add(new Pair(a, a.length));
答案 0 :(得分:4)
将thenComparing()
添加到比较器链中以创建辅助排序顺序。当主要排序还不够时将应用它:
phones.stream()
.sorted(Comparator.comparingInt(String::length).reversed()
.thenComparing(Function.identity()))
.forEach(System.out::println);
答案 1 :(得分:1)
var maxW = 0, count = isChrome ? 0.2 : 0;
答案 2 :(得分:1)
phones.stream()
.sorted((a,b) -> b.length()-a.length() == 0? a.compareTo(b) : b.length()-a.length())
.forEach(System.out::println);