Java 基于列表中的值选择地图

Java 基于列表中的值选择地图,java,java-stream,Java,Java Stream,我有地图列表和字符串列表。如何仅获取结果列表中那些值与listofstring中的值匹配的映射 List<Map<String, Object>> list = listofMaps .stream() .filter(maps -> maps.containsValue(listOfString))

我有地图列表和字符串列表。如何仅获取结果列表中那些值与listofstring中的值匹配的映射

List<Map<String, Object>> list = listofMaps
                                 .stream()
                                 .filter(maps -> maps.containsValue(listOfString))
                                 .collect(Collectors.toList());
List List=listofmap
.stream()
.filter(映射->映射.containsValue(listOfString))
.collect(Collectors.toList());

如果我用实际字符串(如“string”)替换listOfString,则会选择一个映射,但不会选择多个匹配映射。

如果映射中的某个值与
listOfString
中的任何可能值匹配,则需要将
任何匹配
列表::contains
一起使用:

List listofmap=Arrays.asList(
地图(“id”,1,“名称”,“abc”),
地图(“id”,2,“名称”,“xyz”),
地图(“id”,3,“名称”,“stu”)
);
List listOfString=Arrays.asList(“abc”、“stu”);
List listAnyMatch=listofMaps
.stream()
.filter(映射->映射.values()
.stream()
.anyMatch(listOfString::contains))
.collect(Collectors.toList());
listAnyMatch.forEach(System.out::println);
输出

{name=abc, id=1}
{name=stu, id=3}

为什么要用一个字符串值替换listOfString,并期望在列表中找到一个可以放在映射中的字符串呢?假设listofmaps是{id=1,name=abc},{id=2,name=xyz},{id=3,name=stu},根据listOfString{xyz,stu},我想选择两个映射2和3。明白了。所以,我猜map.containsvalue()只对流中的一个值起作用?它更适合于寻找相等的特定值的情况。例如,有一个像
{id=1,list=[“a”,“b”]},{id=2,name=“a”}
这样的映射,然后
包含值(list.of(“a”,“b”)
将找到第一个条目。