String obtained = transactions.stream()
.map(Transaction::getTrader)
.map(Trader::getName)
.sorted(String::compareTo)
.collect(Collectors.joining(","));
如果我想在不写特定Comparator<String>
的情况下反转返回字符串中的自然字母顺序,我该怎么办,以便连接的字符串结果以名称&#39; z开始。&#39 ;,&#39; y ..&#39;,&#39; x ..&#39;等等?
答案 0 :(得分:2)
在java中,像这样的东西可以解决这个问题:
String obtained = transactions.stream()
.map(Transaction::getTrader).map(Trader::getName)
.sorted(Comparator.reverseOrder())
.collect(Collectors.joining(","));
请注意,它的工作原理是因为String实现了Comparable Interface。
答案 1 :(得分:2)
只需按一个操作即可按相反顺序对集合进行排序。
String实现Comparable接口。 java.lang.Comparable#compareTo()的javadoc表示它返回:
作为此对象的负整数,零或正整数 小于,等于或大于指定的对象
要改变收集顺序,您可以:
[推荐] 使用 Comparator.reverseOrder (javadoc)
返回一个比较器,它强加了反向排序 指定比较器。 (...)
List<String> strings = Arrays.asList("a","b","d", "c", "e");
reversedOrderedStrings = strings.stream()
.sorted(Comparator.reverseOrder())
.collect(Collectors.joining(","));
反转比较参数的顺序
reversedOrderedStrings = strings.stream()
.sorted((s1, s2) -> s2.compareTo(s1))
.collect(Collectors.joining(","));
[不推荐] 更改compareTo()方法的符号。建议不要这样做,因为它可能导致Integer.MIN_VALUE
的数字溢出reversedOrderedStrings = strings.stream()
.sorted((s1, s2) -> -s1.compareTo(s2))
.collect(Collectors.joining(","));
所有人的输出都是相同的:
System.out.println(reversedOrderedStrings);
e,d,c,b,a