Java流以查找列表中的事件

时间:2018-10-17 19:40:08

标签: java java-8 java-stream

我正在尝试使用Java流来编写以下代码-

  

获取一个KeyValuePairs列表和一个ListOfValues,并填充一个<Value, boolean>映射,其中Value来自ListOfValues,根据ListOfKeyValuePairs中是否存在值,将布尔值设置为true或false。

我正在开始类似:

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

但无法完成它:(

示例:

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

最终结果:以以下值映射:A1,true和A3,true

1 个答案:

答案 0 :(得分:3)

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));