我有 Java Map<String,List<String>> 和 String var,如何在不使用 For 循环的情况下 return 其值(列表)包含 String var 的键
I have Java Map<String,List<String>> and String var, how to return keys whose values(List) contains String var without using For loops
private Set<Integer> keysForValue(Map<Integer, Set<Integer>> map, Integer value) {
Set<Integer> keysSetContainingValue = new HashSet<Integer>();
for (Map.Entry<Integer, Set<Integer>> entry : map.entrySet()) {
if(entry.getValue().contains(value)) keysSetContainingValue.add(entry.getKey());
}
return keysSetContainingValue;
}
尽管您的标题在您的代码中说的是 Map,但您使用的是 Map ...
return map.entrySet()
.stream()
.filter(entry -> entry.getValue().contains(value))
.map(Map.Entry::getKey)
.collect(Collectors.toSet());
为地图使用 keySet()
而不是 entrySet()
可能会稍微好一些以摆脱冗余映射:
private Set<Integer> keysForValue(Map<Integer, Set<Integer>> map, Integer value) {
return map.keySet()
.stream() // Stream<Integer> of keys
.filter(k -> map.get(k).contains(value))
.collect(Collectors.toSet());
}
private Set<Integer> keysForValue(Map<Integer, Set<Integer>> map, Integer value) {
Set<Integer> keysSetContainingValue = new HashSet<Integer>();
for (Map.Entry<Integer, Set<Integer>> entry : map.entrySet()) {
if(entry.getValue().contains(value)) keysSetContainingValue.add(entry.getKey());
}
return keysSetContainingValue;
}
尽管您的标题在您的代码中说的是 Map
return map.entrySet()
.stream()
.filter(entry -> entry.getValue().contains(value))
.map(Map.Entry::getKey)
.collect(Collectors.toSet());
为地图使用 keySet()
而不是 entrySet()
可能会稍微好一些以摆脱冗余映射:
private Set<Integer> keysForValue(Map<Integer, Set<Integer>> map, Integer value) {
return map.keySet()
.stream() // Stream<Integer> of keys
.filter(k -> map.get(k).contains(value))
.collect(Collectors.toSet());
}