我有一个包含这种格式的字符串的列表:
List<String> ids = new ArrayList<>();
ids.add("B-7");
ids.add("B-5");
ids.add("A-3");
ids.add("B-8");
ids.add("B-1");
ids.add("B-6");
ids.add("B-2");
ids.add("B-3");
ids.add("B-10");
ids.add("A-1");
ids.add("B-4");
ids.add("B-9");
ids.add("A-2");
Run Code Online (Sandbox Code Playgroud)
我需要对其进行排序以获得此输出,(遍历列表):
A-1
A-2
A-3
B-1
B-2
B-3
B-4
B-5
B-6
B-7
B-8
B-9
B-10
Run Code Online (Sandbox Code Playgroud)
我在用:
List<String> sortedIds = ids.stream().sorted().collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
但相反,我的输出:
A-1
A-2
A-3
B-1
B-10 -- Error
B-2
B-3
B-4
B-5
B-6
B-7
B-8
B-9
Run Code Online (Sandbox Code Playgroud)
您可以Comparator
使用Comparator.comparing
和创建自定义Comparator.thenComparing
。
List<String> sortedIds = ids.stream().sorted(
Comparator.comparing((String s) -> s.substring(0, s.indexOf('-')))
.thenComparingInt(s -> Integer.parseInt(s.substring(s.indexOf('-') + 1))))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)