Как сравнить список HashMap с выбранными ключами - PullRequest
0 голосов
/ 25 января 2019

У меня есть 2 списка, которые нужно сравнить и получить хэш-карту списка А, соответствует хэш-карте списка Б. Если кто-то из HahMap совпал, скажите «совпал»

Вот структура

Список 1: -

[{level=3, SubTypeId=12345, TypeId=65}, {level=4, SubTypeId=2310, TypeId=7230}, {level=4, SubTypeId=2311, TypeId=7230}]

Список 2:

[{TypeId=12345, SubTypeId=65}, {TypeId=8100, SubTypeId=63}]

Здесь в hashMap List1 есть дополнительное поле с именем level

HashMap {TypeId=12345, SubTypeId=65} встречается в обоих списках.

Ответы [ 2 ]

0 голосов
/ 25 января 2019
package com.era.demo;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

public class CompareListHashMap {public static void main(String[] args) {
    List<HashMap<String, Integer>> list1 = Arrays.asList(new HashMap<String, Integer>() {{
        put("level", 3);
        put("SubTypeId", 12345);
        put("TypeId", 65);
    }},
    new HashMap<String, Integer>() {{
        put("level", 4);
        put("SubTypeId", 2310);
        put("TypeId", 7230);
    }},
    new HashMap<String, Integer>() {{
        put("level", 4);
        put("SubTypeId", 2311);
        put("TypeId", 7230);
    }});

    List<HashMap<String, Integer>> list2 = Arrays.asList(
            new HashMap<String, Integer>() {{
                 put("SubTypeId", 12345);
                 put("TypeId", 65);
             }},
            new HashMap<String, Integer>() {{
                put("SubTypeId", 8100);
                put("TypeId", 63);
            }});
   if (list1.stream().anyMatch(stringIntegerHashMap -> list2.stream().anyMatch(stringIntegerHashMap1 ->
            stringIntegerHashMap.get("SubTypeId").equals(stringIntegerHashMap1.get("SubTypeId")) && stringIntegerHashMap.get("TypeId").equals(stringIntegerHashMap1.get("TypeId")))))
       System.out.println("Matched");
}}
0 голосов
/ 25 января 2019

Лучшее, что вы можете сделать, это перерыв , когда совпадение найдено.Следующий код показывает, как это сделать, используя anyMatch.Однако в худшем случае каждую карту в одном списке необходимо сравнить с каждой картой в другом.Обойти это невозможно.

List<Map<String, Integer>> list1, list2;
...
boolean matched = list2.stream()
        .anyMatch(list2Map -> list1.stream()
                .anyMatch(map -> map.get("SubTypeId").equals(list2Map.get("SubTypeId"))
                        && map.get("TypeId").equals(list2Map.get("TypeId"))));
System.out.println(matched);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...