从Map中获取包含所有地图值的新列表的最佳方法是什么?
这是对的吗?
List<Value> listValues = new ArrayList<>();
for(TypeKey keys : map.keySet()){
for(TypeValue values : map.get(keys)){
listValues.add(values);
}
}
答案 0 :(得分:3)
如果您有Map<Key, Value>
,则Map#values()
方法会为您提供Collection<Value>
。
对于Map<Key, List<Value>>
,values()
方法显然会为您提供可以展平的Collection<List<Value>>
:
List<Value> values = map.values().stream()
.flatMap(List::stream)
.collect(Collectors.toList());
答案 1 :(得分:1)
如果你不能使用Java 8 Stream
API,你仍然可以通过使用Map#values
直接迭代值列表而不是密钥来使代码缩短,{{3一次性将所有值添加到结果列表中。
public <K, V> List<V> flatValues(Map<K, List<V>> map) {
List<V> result = new ArrayList<>();
for (List<V> values : map.values()) {
result.addAll(values);
}
return result;
}
答案 2 :(得分:0)
public <K, V> List<V> flatValues(Map<K, List<V>> map) {
List<V> result = new ArrayList<>();
for (List<V> values : map.values()) {
result.addAll(values);
}
return result;
}
答案 3 :(得分:0)
public <K, V> List<V> flatValues(Map<K, List<V>> map) {
List<V> result = new ArrayList<>();
for (List<V> values : map.values()) {
result.addAll(values);
}
return result;
}
我用过Java流