我正在尝试使用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
答案 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));