java - मरज - इश्क़ में मर जावा सीरियल




जावा 8 स्ट्रीम मैप मानों द्वारा क्रमबद्ध कुंजियों की सूची के लिए (4)

आप इसे अपनी समस्या के उदाहरण के रूप में उपयोग कर सकते हैं

    Map<Integer, String> map = new HashMap<>();
    map.put(10, "apple");
    map.put(20, "orange");
    map.put(30, "banana");
    map.put(40, "watermelon");
    map.put(50, "dragonfruit");

    // split a map into 2 List
    List<Integer> resultSortedKey = new ArrayList<>();
    List<String> resultValues = map.entrySet().stream()
            //sort a Map by key and stored in resultSortedKey
            .sorted(Map.Entry.<Integer, String>comparingByKey().reversed())
            .peek(e -> resultSortedKey.add(e.getKey()))
            .map(x -> x.getValue())
            // filter banana and return it to resultValues
            .filter(x -> !"banana".equalsIgnoreCase(x))
            .collect(Collectors.toList());

    resultSortedKey.forEach(System.out::println);
    resultValues.forEach(System.out::println);

मेरे पास मैप Map<Type, Long> countByType और मैं ऐसी लिस्ट रखना चाहता हूं, जो उनके संबंधित मूल्यों द्वारा सॉर्ट की गई (न्यूनतम से अधिकतम) हो। मेरी कोशिश है:

countByType.entrySet().stream().sorted().collect(Collectors.toList());

हालाँकि, यह मुझे केवल प्रविष्टियों की एक सूची देता है, मैं आदेश को खोए बिना कैसे प्रकारों की एक सूची प्राप्त कर सकता हूं?


आप कहते हैं कि आप मूल्य के अनुसार क्रमबद्ध करना चाहते हैं, लेकिन आपके पास अपने कोड में ऐसा नहीं है। यह बताने के लिए कि आपको कैसे sorted करना है, यह बताने के लिए एक लंबो (या विधि संदर्भ) पास करें।

और आप चाबी प्राप्त करना चाहते हैं; प्रविष्टियों को कुंजियों में बदलने के लिए map का उपयोग map

List<Type> types = countByType.entrySet().stream()
        .sorted(Comparator.comparing(Map.Entry::getValue))
        .map(Map.Entry::getKey)
        .collect(Collectors.toList());

आपको प्रवेश के मूल्य के आधार पर एक कस्टम तुलनित्र के साथ क्रमबद्ध करना होगा। फिर इकट्ठा करने से पहले सभी कुंजियों का चयन करें

countByType.entrySet()
           .stream()
           .sorted((e1, e2) -> e1.getValue().compareTo(e2.getValue())) // custom Comparator
           .map(e -> e.getKey())
           .collect(Collectors.toList());

यहाँ StreamEx साथ सरल समाधान है

EntryStream.of(countByType).sortedBy(e -> e.getValue()).keys().toList();





java-stream