如何从Map <key,list <value>&gt;获取列表<值>

时间:2017-06-03 10:31:36

标签: java dictionary

从Map中获取包含所有地图值的新列表的最佳方法是什么?

这是对的吗?

List<Value> listValues = new ArrayList<>();
for(TypeKey keys : map.keySet()){
 for(TypeValue values : map.get(keys)){
  listValues.add(values);
 }
}

4 个答案:

答案 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流