2016-11-09 8 views
7

मुझे स्ट्रीम से एक सूची क्रमबद्ध करने में दिलचस्पी है। यह वह कोड है जिसका मैं उपयोग कर रहा हूं:जावा में stream.sorted() के साथ एक सूची को सॉर्ट करना

list.stream() 
    .sorted((o1, o2)->o1.getItem().getValue().compareTo(o2.getItem().getValue())) 
    .collect(Collectors.toList()); 

क्या मुझे कुछ याद आ रही है? सूची क्रमबद्ध नहीं है।

इसे आइटम के अनुसार सबसे कम मूल्य वाले सूचियों को सॉर्ट करना चाहिए।

for (int i = 0; i < list.size(); i++) 
{ 
    System.out.println("list " + (i+1)); 
    print(list, i); 
} 

और प्रिंट विधि:

public static void print(List<List> list, int i) 
{ 
    System.out.println(list.get(i).getItem().getValue()); 
} 

उत्तर

26

यह Collections.sort() जैसा नहीं है जहां पैरामीटर संदर्भ सॉर्ट किया जाता है।

List result = list.stream().sorted((o1, o2)->o1.getItem().getValue(). 
            compareTo(o2.getItem().getValue())). 
            collect(Collectors.toList()); 

तुम बस परिणाम :)

0

ऐसा लगता है ठीक से काम कर रहा:

List<BigDecimal> list = Arrays.asList(new BigDecimal("24.455"), new BigDecimal("23.455"), new BigDecimal("28.455"), new BigDecimal("20.455")); 
System.out.println("Unsorted list: " + list); 
final List<BigDecimal> sortedList = list.stream().sorted((o1, o2) -> o1.compareTo(o2)).collect(Collectors.toList()); 
System.out.println("Sorted list: " + sortedList); 

उदाहरण इनपुट/आउटपुट

Unsorted list: [24.455, 23.455, 28.455, 20.455] 
Sorted list: [20.455, 23.455, 24.455, 28.455] 

क्या आपको यकीन है आप sortedList [उपर्युक्त उदाहरण में] के बजाय सूची की पुष्टि नहीं कर रहे हैं यानी आप stream() का परिणाम List ऑब्जेक्ट में ऑब्जेक्ट को सत्यापित कर रहे हैं और उस ऑब्जेक्ट को सत्यापित कर रहे हैं?

3

उपयोग list.sort बजाय आवंटित करने के लिए नहीं छूटा है: इस मामले में आप सिर्फ एक हल कर धारा है कि आप को इकट्ठा करने और अंत में एक और चर के लिए आवंटित करने के लिए ज़रूरत

list.sort((o1, o2) -> o1.getItem().getValue().compareTo(o2.getItem().getValue())); 

या और भी बेहतर उपयोग करने Comparator.comparing

list.sort(Comparator.comparing(o -> o.getItem().getValue())); 

इनमें से किसी एक के बाद, list स्वयं को हल किया जाएगा।

आपका मुद्दा यह है कि list.stream.sortedरिटर्न क्रमबद्ध डेटा, यह जगह में सॉर्ट नहीं करता है के रूप में आप उम्मीद कर रहे हैं है।

संबंधित मुद्दे