मेरे पास मानचित्रों की दो सूचियां हैं, और प्रत्येक मानचित्र आईडी फ़ील्ड के रूप में है। मुझे संग्रहबी से लापता आईडी खोजने के लिए इन दो सूचियों की एक दूसरे के खिलाफ तुलना करने की आवश्यकता है (नीचे में "7777")

    List<Map<String, Object>> collectionA = new ArrayList<Map<String, Object>>() {{
        add(new HashMap<String, Object>() {{ put("id", "5555"); }});
        add(new HashMap<String, Object>() {{ put("id", "6666"); }});
        add(new HashMap<String, Object>() {{ put("id", "7777"); }});
        add(new HashMap<String, Object>() {{ put("id", "8888"); }});
    }};

    List<Map<String, Object>> collectionB = new ArrayList<Map<String, Object>>() {{
        add(new HashMap<String, Object>() {{
            add(new HashMap<String, Object>() {{ put("id", "5555"); }});
            add(new HashMap<String, Object>() {{ put("id", "6666"); }});
            add(new HashMap<String, Object>() {{ put("id", "8888"); }});
        }});
    }};

मैं वास्तव में स्ट्रीम() के बारे में और जानना चाहता हूं, इसलिए इसके साथ किसी भी मदद की सराहना की जाएगी। जैसा कि आप बता सकते हैं कि मुझे सच में यकीन नहीं है कि इसके साथ कहां से शुरुआत करें:

मैं इस रास्ते से नीचे जाने लगा लेकिन ऐसा लगता है कि यह सही तरीका नहीं है।

    List<String> bids = collectionB.stream()
        .map(e -> e.entrySet()
            .stream()
            .filter(x -> x.getKey().equals("id"))
            .map(x -> x.getValue().toString())
            .collect(joining("")
        )).filter(x -> StringUtils.isNotEmpty(x)).collect(Collectors.toList());

मुझे लगता है कि यह मुझे स्ट्रिंग्स की दो सूचियों में ले जाता है जिनकी मैं तुलना कर सकता हूं लेकिन ऐसा लगता है कि यह इष्टतम दृष्टिकोण नहीं है। किसी भी मदद की सराहना की जाती है।

1
Justin 29 नवम्बर 2020, 21:09

1 उत्तर

सबसे बढ़िया उत्तर

यदि आप collectionA से आइटम के मानचित्र को फ़िल्टर करना चाहते हैं जो collectionB में मौजूद नहीं हैं, तो collectionA को पुनरावृत्त करें और प्रत्येक प्रविष्टि की जांच करें Map में से किसी में collectionB, और अंत में Map में प्रवेश प्राप्त करें जो collectionB में मौजूद नहीं है

List<Map<String,String>> results = collectionA.stream()
    .flatMap(map->map.entrySet().stream())
    .filter(entry->collectionB.stream().noneMatch(bMap->bMap.containsValue(entry.getValue())))
    .map(entry-> Collections.singletonMap(entry.getKey(),entry.getValue()))
    .collect(Collectors.toList());
1
Michael 30 नवम्बर 2020, 13:49