我有例如sg-1,sg-5,sg-13,sg-6等elemenets列表,我需要按数字排序。 我的代码部分是:
}).map(c -> {
System.out.println(c);
return c;
}).distinct()
.sorted((c1, c2) -> c1.substring(c1.indexOf("-"), c1.length())
.compareTo(c2.substring(c2.indexOf("-"), c2.length())))
.collect(Collectors.toList());
系统输出打印 SG-1 SG-1 SG-1 SG-9 SG-1 SG-4 SG-15 SG-1 SG-1 SG-1 SG-1
但最终我得到了[sg-1,sg-15,sg-4,sg-9]但是它必须是[sg-1,sg-4,sg-9,sg-15] 如何排序,请帮助我:) :( / p>
答案 0 :(得分:4)
你做错的第一件事就是你按字典顺序比较字符串而不是你想象的整数。
其次,即使您将c1.substring(c1.indexOf("-"), c1.length())
转换为整数然后进行比较,您仍会得到不正确的结果。
为什么会这样?
这是因为c1.substring(c1.indexOf("-"), c1.length())
,substring的第一个参数是 inclusive ,这意味着你总是会提取负数。
解决方案:
c1.indexOf("-") + 1
另外,请勿使用List<String> result = list.stream()
.distinct()
.sorted(Comparator.comparingInt(s ->
Integer.parseInt(s.substring(s.indexOf("-") + 1, s.length()))))
.collect(Collectors.toList());
执行调试工作,而是使用peek。
map
答案 1 :(得分:1)
请试一试