сравнить две карты, используя лямда-выражение Java - PullRequest
0 голосов
/ 04 июля 2018

Мне нужно сравнить ключ, присутствующий на карте A, на карте B. Если ключ присутствует на обеих картах (A и B), то добавьте этот конкретный ключ, и значение необходимо добавить к новой карте c, используя выражение лямда. Пожалуйста, найдите мой пример кода ниже:

mapA.forEach((key, value) -> mapC.put(mapB.get(Key), value)));

Приведенный выше код в настоящее время не проверяет наличие ключа в mapA, mapB перед добавлением в mapC.

Ответы [ 3 ]

0 голосов
/ 04 июля 2018

Нечто подобное:

mapA
    .entrySet()
    .stream()
    .filter(entry -> mapB.containsKey(entry.getKey()))
    .collect(
        Collectors.toMap(Entry::getKey, Entry::getValue));

Если вы не настаиваете на лямбдах, вы также можете сделать:

Map<K, V> mapC = new HashMap<>(mapA);
mapC.keySet().retainAll(mapB.keySet());
0 голосов
/ 04 июля 2018

вы можете использовать поток и фильтр, чтобы получить ключи, которые присутствуют на обеих картах, а затем перебрать отфильтрованный набор результатов, чтобы сохранить его на третьей карте.

    Map<Integer, String> mapA = new HashMap();
    Map<Integer, String> mapB =  new HashMap();
    Map<Integer, String> mapC =  new HashMap();

    mapA.put(1, "Hi");
    mapA.put(2, "Hello");
    mapB.put(1, "Hi");
    mapB.put(3, "Bye");

    mapA.entrySet().stream().filter(x -> mapB.containsKey(x.getKey())).forEach(x -> mapC.put(x.getKey(), x.getValue()));

    System.out.println(mapC); // output will be {1=Hi}
0 голосов
/ 04 июля 2018

Просто добавьте условие if, чтобы проверить, присутствует ли ключ на второй карте.

mapA.forEach((key, value) -> {
    if (mapB.containsKey(key)) {
        mapC.put(mapB.get(key), value));
    }
});

Но что, если значения разные? С тем, что вы сказали, кажется, они будут равны

Вот еще один способ сделать это (при условии, что это Map<String, String для демонстрации)

Set<Map.Entry<String, String>> entrySetMapA = new HashSet<>(mapA.entrySet());
entrySetMapA.retainAll(mapB.entrySet());
entrySetMapA.forEach(entry -> mapC.put(entry.getKey(), entry.getValue()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...