当前位置: 首页 > 面试题库 >

如何在Java 8中拼合地图列表

商宏爽
2023-03-14
问题内容

我有地图清单的要求

[{Men=1},{Men=2, Women=3},{Women=2,Boys=4}]

现在我需要将其设置为flatMap,使其看起来像

Gender=countOfValues

在上面的示例中,输出为

{Men=3,Women=5,Boys=4}

目前,我有以下代码:

private Map<String, Long> getGenderMap(
        List<Map<String, Long>> genderToCountList) {
    Map<String, Long> gendersMap = new HashMap<String, Long>();
    Iterator<Map<String, Long>> genderToCountListIterator = genderToCountList
            .iterator();
    while (genderToCountListIterator.hasNext()) {
        Map<String, Long> genderToCount = genderToCountListIterator.next();
        Iterator<String> genderToCountIterator = genderToCount.keySet()
                .iterator();
        while (genderToCountIterator.hasNext()) {
            String gender = genderToCountIterator.next();
            if (gendersMap.containsKey(gender)) {
                Long count = gendersMap.get(gender);
                gendersMap.put(gender, count + genderToCount.get(gender));
            } else {
                gendersMap.put(gender, genderToCount.get(gender));
            }
        }
    }
    return gendersMap;
}

我们如何使用Java8和Lambda表达式编写这段代码?


问题答案:

我不会为此使用任何lambda,但是我已经使用Map.merge了Java 8中引入的和方法参考。

Map<String, Long> result = new HashMap<>();
for (Map<String, Long> map : genderToCountList)
    for (Map.Entry<String, Long> entry : map.entrySet())
        result.merge(entry.getKey(), entry.getValue(), Long::sum);

您也可以使用Streams 执行此操作:

return genderToCountList.stream().flatMap(m -> m.entrySet().stream())
           .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, Long::sum));


 类似资料:
  • 我试图使用

  • 我在数据帧中有两个映射类型列。有没有一种方法可以通过使用.withColumn在spark Sql中合并这两个列来创建新的映射列?

  • 我有一个映射集合,其中包含productId、数量和订单数量的列表,格式为productId=[quantity,no of orders]。地图收藏就像 对于每个productId,都有数量和数量的订单。代码是用java返回的。我的要求是,我想将订单的ProductID、数量和编号分成3个不同的列表,如 订单的数量和编号应该与它们相关的产品Id相匹配。我如何在java中实现这一点?

  • 我想按id分组。 结果应如下所示: 静态编程语言中最惯用的方法是什么?

  • 问题内容: 我的直觉告诉我,必须以某种方式将其转换为字符串或byte [](在Go中甚至可能是相同的东西?),然后将其保存到磁盘。 我找到了这个包(http://golang.org/pkg/encoding/gob/),但似乎仅用于结构? 问题答案: 序列化数据有多种方法,Go为此提供了许多软件包。某些常见编码方式的软件包: 处理地图很好。以下示例显示了地图的编码/解码: 操场

  • 我有这样一个代码: 你能帮我完成代码库吗?