Java 在两个列表中创建匹配元素的映射

Java 在两个列表中创建匹配元素的映射,java,lambda,collections,java-8,java-stream,Java,Lambda,Collections,Java 8,Java Stream,我有两张单子。我想创建一个映射,在Java8中,匹配元素为true,唯一元素为false。 例如。 输入- 列表1=[A,B,C,D] 列表2=[B,C,Y,Z] 输出- 地图: A、 假的 B、 真的 C、 真的 D、 假的 我的代码: Map<String,Boolean> map = new HashMap<>(); for(String var1 : list1) { boolean value;

我有两张单子。我想创建一个映射,在Java8中,匹配元素为true,唯一元素为false。
例如。
输入-

列表1=[A,B,C,D]
列表2=[B,C,Y,Z]

输出-

地图

A、 假的

B、 真的

C、 真的

D、 假的

我的代码:

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);
                }
            }
Map Map=newhashmap();
for(字符串var1:list1){
布尔值;
if(CollectionUtils.isNotEmpty(列表2)){
可选值Optional=list2.stream()
.filter(e1->e1.equalSignalCase(var1))
.findAny();
value=valueOptional.isPresent();
map.put(var1,value);
}
}

首先,使用第二个列表创建一个
集合。然后使用
toMap
收集器创建映射,该映射以字符串作为键,并以setTwo中存在的字符串作为值。这是它的样子

Set<String> setTwo = new HashSet<>(listTwo);
Map<String, Boolean> existenceMap = listOne.stream()
    .collect(Collectors.toMap(s -> s, setTwo::contains, (a, b) -> a));
Set setTwo=新的HashSet(listwo);
映射存在映射=listOne.stream()
.collect(Collectors.toMap(s->s,setTwo::contains,(a,b)->a));

我推荐使用布尔键和值作为列表的映射

Map<Boolean, List<String>> map = list1.stream()
                                      .collect(Collectors.partitioningBy(list2::contains));   // or set::contains
Map Map=list1.stream()
.collect(收集器.partitionby(list2::contains));//或集合::包含

我看到你也因为Hybris而痛苦。尽管如此,请花些时间阅读,特别是命名为和的部分。也请阅读。最后,请阅读这篇文章。