使用stream API可对map按key、value或两者同时筛选,返回符合条件的新Map,例如通过Filter结合Collectors.toMap实现,且不修改原Map。

在Java中对Map进行条件筛选,通常可以通过Stream API结合过滤条件来实现。你可以根据key、value或两者同时进行筛选,最终得到符合条件的新Map。
按Value进行筛选
如果想根据Map的value进行筛选,比如找出所有值大于10的条目:
Map<String, Integer> map = new HashMap<>(); map.put("a", 5); map.put("b", 15); map.put("c", 20); Map<String, Integer> filtered = map.entrySet() .stream() .filter(entry -> entry.getValue() > 10) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); // 结果:{b=15, c=20}
按Key进行筛选
若要根据key的条件筛选,例如只保留key为”a”或”b”的项:
Map<String, Integer> filtered = map.entrySet() .stream() .filter(entry -> Arrays.asList("a", "b").contains(entry.getKey())) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
同时按Key和Value筛选
可以组合多个条件,比如key包含某个字符且value满足某条件:
立即学习“Java免费学习笔记(深入)”;
Map<String, Integer> filtered = map.entrySet() .stream() .filter(entry -> entry.getKey().startsWith("b") && entry.getValue() < 100) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
注意:如果原始Map有NULL值或筛选后出现重复key,可能需要处理异常或使用第三个参数指定合并策略,如:
.collect(Collectors.toMap(..., ..., (v1, v2) -> v1))
提示:使用Stream不会修改原Map,返回的是新Map。适合处理不可变场景。如果数据量小,传统for循环也可行,但Stream更简洁易读。 基本上就这些。


