如何从`List <map.entry <k,v >>`中构建Java`Map <k,v>`?

时间:2018-11-11 11:25:42

标签: java

我有一个List<Map.Entry<Long, String>>

如何将其转换为Map

目前,我正在执行以下操作,但似乎有些冗长(最重要的是,它不是“流利的”,即单个表达式,但需要一个代码块)。

Map<Long, String> result = new HashMap<>();
entries.forEach(e -> result.put(e.getKey(), e.getValue()));
return result;

Java 10很好。

2 个答案:

答案 0 :(得分:2)

如果您确定没有重复的密钥,那就足够了:

Map<Long, String> result = entries.stream().collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue));

如果可能有重复项,则必须添加合并功能来处理它们。

答案 1 :(得分:2)

将其平铺:

Map<Long, String> result = 
    entries.stream()
        .collect(toMap(e -> e.getKey(), e -> e.getValue(), (a, b) -> b);

(a, b) -> b表示将采用重复键的最后一个值,该值与您当前方法的语义相匹配。