String 如何使用流API反转比较器顺序?

String 如何使用流API反转比较器顺序?,string,collections,java-8,java-stream,comparator,String,Collections,Java 8,Java Stream,Comparator,如果我想在返回的字符串中反转自然的字母顺序,而不编写特定的比较器,这样连接的字符串结果以名称“z…”、“y…”、“x…”等开头,我该怎么办 String obtained = transactions.stream() .map(Transaction::getTrader) .map(Trader::getName) .sorted(String::compareTo) .collect(Collectors.joining(",")); 请注意,它之所以有效

如果我想在返回的字符串中反转自然的字母顺序,而不编写特定的
比较器,这样连接的字符串结果以名称“z…”、“y…”、“x…”等开头,我该怎么办

String obtained = transactions.stream()
    .map(Transaction::getTrader)
    .map(Trader::getName)
    .sorted(String::compareTo)
    .collect(Collectors.joining(","));

请注意,它之所以有效,是因为字符串实现了可比较的接口

在java中,类似这样的东西可以做到:

String obtained = transactions.stream()
    .map(Transaction::getTrader)
    .map(Trader::getName)
    .sorted(String::compareTo)
    .collect(Collectors.joining(","));

请注意,它之所以有效,是因为字符串实现了可比较的接口

按相反顺序对集合排序只需要一个操作

字符串实现可比较的接口。for java.lang.Comparable的#compareTo()表示它返回:

作为此对象的负整数、零或正整数 小于、等于或大于指定对象

要颠倒收款顺序,您可以:

  • [推荐]使用Comparator.reverseOrder()命令

    返回一个比较器,该比较器对 指定比较器。(……)

  • [不推荐]更改compareTo()方法的符号。不建议这样做,因为它会导致Integer.MIN_值出现数字溢出

    reversedOrderedStrings = strings.stream()
                                .sorted((s1, s2) ->  s2.compareTo(s1))
                                .collect(Collectors.joining(","));
    
  • 所有的输出都是相同的:

    reversedOrderedStrings = strings.stream()
                                .sorted((s1, s2) -> -s1.compareTo(s2))
                                .collect(Collectors.joining(","));
    

    按相反顺序对集合排序只需要一个操作

    字符串实现可比较的接口。for java.lang.Comparable的#compareTo()表示它返回:

    作为此对象的负整数、零或正整数 小于、等于或大于指定对象

    要颠倒收款顺序,您可以:

  • [推荐]使用Comparator.reverseOrder()命令

    返回一个比较器,该比较器对 指定比较器。(……)

  • [不推荐]更改compareTo()方法的符号。不建议这样做,因为它会导致Integer.MIN_值出现数字溢出

    reversedOrderedStrings = strings.stream()
                                .sorted((s1, s2) ->  s2.compareTo(s1))
                                .collect(Collectors.joining(","));
    
  • 所有的输出都是相同的:

    reversedOrderedStrings = strings.stream()
                                .sorted((s1, s2) -> -s1.compareTo(s2))
                                .collect(Collectors.joining(","));
    

    你是对的,但问题是不要编写自己的比较器。我承认你的方法更快,必须使用。是的,我知道我能做到,我正在寻找Collection.reverseOrder()方法。我应该在我的答案中使用“排序(Comparator.reverseOrder())”,如中所述。@Holger-更正了答案。谢谢你的评论。你是对的,但问题是不要写你自己的比较器。我承认你的方法更快,必须使用。是的,我知道我能做到,我正在寻找Collection.reverseOrder()方法。我应该在我的答案中使用“排序(Comparator.reverseOrder())”,如中所述。@Holger-更正了答案。谢谢你的评论。这正是我所期待的!Thx,Tdrs我想你指的是
    Comparator.reverseOrder()
    而不是
    Collection
    ,这正是我所期望的!Thx,Tdrs我想你指的是
    Comparator.reverseOrder()
    而不是
    Collection