gpt4 book ai didi

java - map 过滤器列表导致额外的空项目

转载 作者:行者123 更新时间:2023-12-03 23:58:34 25 4
gpt4 key购买 nike

我有一个简单的类如下:

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

预期输出:listOfMaps1::[{aa1k=aa1v}, {bb2k=bb2v}]

实际输出:listOfMaps1::[{aa1k=aa1v}, {bb2k=bb2v}, {}]

问题:即使第三张 map 没有通过过滤条件,为什么它在结果中显示为空?怎么能省略呢?

最佳答案

您正在通过过滤每个内容来构建 map 。其中一个将是空的,因为没有传递任何值(但您仍然创建了它)。因此,您需要先过滤空 map ,然后再将其添加到列表中。

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

关于java - map 过滤器列表导致额外的空项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66190020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com