Поток Java для поиска вхождений в списке - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь написать этот код, используя потоки Java, которые выполняют следующее:

Взять список KeyValuePairs и ListOfValues ​​и заполнить карту <Value, boolean>, где Value происходит из ListOfValues ​​илогическое значение имеет значение true или false в зависимости от того, присутствовало ли значение в ListOfKeyValuePairs.

Я запускаю что-то вроде:

keyValuePairs.stream().map(KeyValuePair::getValue) ... 

Но не могу его завершить: (

Пример:

List<KeyValuePairs> has {(1, A1), (2,A2), (3,A3)}
ListofValues has {A1,A3}

Конечный результат: Карта со значениями: A1, true и A3, true

1 Ответ

0 голосов
/ 17 октября 2018

List<KeyValuePairs> можно преобразовать в Set<Value> для ускорения дальнейших поисков:

var set = pairs.stream()
               .map(KeyValuePair::getValue)
               .collect(Collectors.toSet());

Затем, если полученная карта не должна содержать элементы, которые не были найдены в pairs, отфильтруйте их по set::contains:

var map = list.stream()
              .filter(set::contains)
              .collect(Collectors.toMap(Function.identity(), i -> true));

Если полученная карта должна содержать каждый элемент из list, независимо от того, были ли они найдены:

var map = list.stream()
              .collect(Collectors.toMap(Function.identity(), set::contains));
...