按字母顺序对java中的字符串列表进行排序

And*_*nza 1 java sorting list

我有一个包含这种格式的字符串的列表:

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)

hev*_*ev1 5

您可以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)