Java如何不使用For循环获取值List包含指定String的Map对应键集合
实现方案
你可以直接使用Java 8及以上版本提供的Stream流式API完成需求,不需要编写显式的for循环代码。
适配Map<String, List<String>>场景的代码
import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; private Set<String> keysForValue(Map<String, List<String>> map, String targetValue) { return map.entrySet() .stream() // 过滤出值List包含目标字符串的条目 .filter(entry -> entry.getValue().contains(targetValue)) // 提取对应键 .map(Map.Entry::getKey) // 收集为Set返回 .collect(Collectors.toSet()); }
原有Map<Integer, Set<Integer>>版本修改后代码
import java.util.Map; import java.util.Set; import java.util.stream.Collectors; private Set<Integer> keysForValue(Map<Integer, Set<Integer>> map, Integer value) { return map.entrySet() .stream() .filter(entry -> entry.getValue().contains(value)) .map(Map.Entry::getKey) .collect(Collectors.toSet()); }
说明
- 整个实现没有显式的for/while循环逻辑,迭代操作由Stream框架内部完成,符合要求
- 仅支持Java 8及更高版本使用,需要额外导入
java.util.stream.Collectors类
内容的提问来源于stack exchange,提问作者KMJ
相关产品推荐
相关产品推荐

