我有一个ArrayList<String>
,其中包含“建筑物钥匙”编号列表。
如果您在通过搜索找到解决方案之前已经回答了这个问题,请原谅我。
public class SortKeyNumbers {
public static void main(String args[]) {
ArrayList<String> keys = new ArrayList<>();
keys.add("1");
keys.add("10");
keys.add("2");
keys.add("3");
keys.add("3B");
keys.add("12");
keys.add("12C");
keys.add("21");
keys.add("32");
Collections.sort(keys);
System.out.println(keys);
}
}
这给了我[1, 10, 12, 12C, 2, 21, 3, 32,3B]
的输出
我知道这是Collections.sort
的预期结果
我需要的是[1, 2, 3, 3B, 10, 12, 12C, 21, 32]
我要问的是帮助编写正确的comparator
或compareTo
以获得所需的输出。
答案 0 :(得分:0)
您可以使用比较器功能,该功能将从键中剥离所有非数字字符,然后将其解析为整数:
Collections.sort(keys, Comparator.comparing(s -> Integer.parseInt(s.replaceAll("[^\\d]", ""))));
输出:
[1, 2, 3, 3B, 10, 12, 12C, 21, 32]
答案 1 :(得分:0)
您可以使用ArrayList.sort并通过删除非数字来仅比较整数
keys.sort(Comparator.comparing(str-> Integer.valueOf(str.replaceAll("\\D+",""))));