2015-05-21 3 views
12

मैं seq1 आरोही और seq2 उतरते क्रमबद्ध करना चाहते हैं तो मैं यह करते हैं।जावा धारा प्रकार 2 चर आरोही/desending

मैं seq1 आरोही और seq2 उतरते बनाने के लिए ऐसा कर सकते हैं:

sorted(comparing(AClass::getSeq1) 
    .reversed().thenComparing(AClass::getSeq2).reversed() 

क्या वास्तव में ऐसा करने का सही तरीका क्या है?

+0

भविष्य में, अपने 'आयात static' बयान प्रदान करें:

आप क्या जरूरत है केवल दूसरे तुलना है, जो किया जा सकता है, उदाहरण के लिए, के साथ उल्टा करने के लिए है। – aaiezza

उत्तर

21

आपके पहले उदाहरण में, 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()); 
+0

वाह! समस्या को हल करने के एक से अधिक तरीके हैं। धन्यवाद! – Bruce

+11

['.thenComparing (AClass :: getSeq2, रिवर्सऑर्डर())'] (http://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html#thenComparing-java.util। function.Function-java.util.Comparator-) भी संभव है और स्रोत कोड की लंबाई (क्या एक करीबी मैच) के बारे में विजेता होगा ... – Holger

+2

'आयात स्थैतिक 'कथन जोड़ने के लिए धन्यवाद। वे वास्तव में सवाल में होना चाहिए था ... – aaiezza