Создать карту совпадающих элементов в двух списках - PullRequest
0 голосов
/ 14 октября 2019

У меня есть два списка. Я хочу создать карту, которая будет иметь true для соответствующего элемента и false для уникального в java 8.
Например .
Ввод -

Список 1 = [A, B, C, D]
Список 2 = [B, C, Y, Z]

Выход -

Карта :

A, false

B, true

C, true

D, false

Мой код:

Map<String,Boolean> map = new HashMap<>();
            for(String var1 : list1) {
                boolean value;
                if (CollectionUtils.isNotEmpty(list2)) {
                    Optional<String> valueOptional = list2.stream()
                            .filter(e1 -> e1.equalsIgnoreCase(var1))
                            .findAny();
                    value = valueOptional.isPresent();
                    map.put(var1, value);
                }
            }

Ответы [ 2 ]

6 голосов
/ 14 октября 2019

Сначала создайте Set, используя второй список. Затем используйте коллектор toMap, чтобы создать карту, в которой ключом является строка, а в качестве значения она указана в setTwo. Вот как это выглядит.

Set<String> setTwo = new HashSet<>(listTwo);
Map<String, Boolean> existenceMap = listOne.stream()
    .collect(Collectors.toMap(s -> s, setTwo::contains, (a, b) -> a));
2 голосов
/ 14 октября 2019

Я бы рекомендовал карту с логическим ключом и значениями в виде списка

Map<Boolean, List<String>> map = list1.stream()
                                      .collect(Collectors.partitioningBy(list2::contains));   // or set::contains
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...