【发布时间】:2018-09-22 22:14:00
【问题描述】:
我有例如 sg-1、sg-5、sg-13、sg-6 等元素的列表,我需要按数字对它们进行排序。 我的代码部分是:
}).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] 如何对它们进行排序,请帮助我的:)
【问题讨论】:
-
c1.substring(c1.indexOf("-"), c1.length()) 返回一个带有破折号(-)的值,该值被视为负数。例如,您的代码将返回 -1, -5, -13 而不是 1,5,13,您可以使用 c1.substring(c1.indexOf("-") + 1, c1.length()) 跳过破折号 (-)。我不明白你为什么要使用地图。
-
所以,是的,你是对的,但是我尝试使用 .sorted((c1, c2) -> c1.substring(c1.indexOf("-") + 1, c1.length ()) .compareTo(c2.substring(c2.indexOf("-") + 1, c2.length()))) .collect(Collectors.toList());但它不起作用。可能是“comparedTo”无法正确排序数字,如果它们是字符串而不是整数或整数?
标签: java sorting java-stream comparator