Java流排序2变量升序/取消发送

Bru*_*uce 18 java sorting comparator java-8 java-stream

我想排序seq1升序和seq2降序所以我这样做:

list = list.stream().sorted(comparing(AClass::getSeq1).thenComparing(        
   AClass::getSeq2).reversed()).collect(toList());
Run Code Online (Sandbox Code Playgroud)

但结果出来了,因为seq1和seq2都按降序排序.

我可以这样做以使seq1升序和seq2降序:

sorted(comparing(AClass::getSeq1)
   .reversed().thenComparing(AClass::getSeq2).reversed()
Run Code Online (Sandbox Code Playgroud)

这是真正的正确方法吗?

ass*_*ias 40

在您的第一个示例中,reversed将应用于整个比较器,该比较器按升序比较seq1和seq2.

您需要的是仅反转第二个比较,例如,可以通过以下方式完成:

import static java.util.Collections.reverseOrder;
import static java.util.Comparator.comparing;

list = list.stream().sorted(
                        comparing(AClass::getSeq1)
                       .thenComparing(reverseOrder(comparing(AClass::getSeq2))))
                       .collect(toList());


//or you could also write:

list = list.stream().sorted(
                        comparing(AClass::getSeq1)
                       .thenComparing(comparing(AClass::getSeq2).reversed()))
                       .collect(toList());
Run Code Online (Sandbox Code Playgroud)

  • [`.thenComparing(AClass :: getSeq2,reverseOrder())`](http://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html#thenComparing-java.util.function .Function-java.util.Comparator-)也是可能的,并且将成为关于源代码长度的赢家(什么是紧密匹配)... (14认同)
  • 感谢您加入`进口static`语句.他们真的应该问题...... (2认同)