Aja*_*mar 3 java dictionary java-stream
我有一个简单的类,如下所示:
public class ListOfMapsExample {
public static void main(String[] args) {
Map<String, String> map1 = Map.of("aa1k", "aa1v", "aa2k", "aa2v", "aa3k", "aa3v");
Map<String, String> map2 = Map.of("bb1k", "bb1v", "bb2k", "bb2v", "bb3k", "bb3v");
Map<String, String> map3 = Map.of("cc1k", "cc1v", "cc2k", "cc2v", "cc3k", "cc3v");
List<Map<String, String>> maps = Arrays.asList(map1, map2, map3);
List<Map<String, String>> listOfMaps1 = maps.stream()
.map(m -> m.entrySet().stream()
.filter(map -> map.getKey().equals("aa1k") || map.getKey().equals("bb2k"))
.collect(Collectors.toMap(p -> p.getKey(), p -> p.getValue())))
.collect(Collectors.toList());
System.out.println("listOfMaps1 :: " + listOfMaps1);
}
}
Run Code Online (Sandbox Code Playgroud)
预期输出:
listOfMaps1 :: [{aa1k=aa1v}, {bb2k=bb2v}]
实际输出:
listOfMaps1 :: [{aa1k=aa1v}, {bb2k=bb2v}, {}]
问题: 即使第三张地图没有通过过滤条件,为什么它在结果中显示为空?我怎么能省略它?
您正在通过过滤每个内容来构建地图。其中之一将是空的,因为没有传递任何值(但您仍然创建了它)。因此,您需要先过滤空地图,然后再将其添加到列表中。
List<Map<String, String>> listOfMaps1 = maps.stream()
.map(m -> m.entrySet().stream()
.filter(map -> map.getKey().equals("aa1k")
|| map.getKey().equals("bb2k"))
.collect(Collectors.toMap(p -> p.getKey(),
p -> p.getValue()))).filter(map->!map.isEmpty())
.collect(Collectors.toList());
System.out.println("listOfMaps1 :: " + listOfMaps1);
Run Code Online (Sandbox Code Playgroud)