有什么方法可以在lambda函数中创建此哈希图吗?

        Map<SaleStatus, Long> sales = new HashMap<>();
    saleStatusCounters.forEach(saleStatusCounter -> sales.put(saleStatusCounter.getStatus(), saleStatusCounter.getMatches()));


像这样:

        saleStatusCounters.stream()
            .map(obj -> new HashMap<SaleStatus, Long>().put(obj.getStatus(), obj.getMatches()))
            .collect(Collectors.toMap(???)));

最佳答案

您的代码保持原样。但是,您可以使用流和Collectors.toMap来获得所需的结果:

Map<SaleStatus, Long> sales = saleStatusCounters.stream()
    .collect(Collectors.toMap(obj -> obj.getStatus(), obj -> obj.getMatches()));


注意:只要地图中没有碰撞(即只要您没有两个或多个状态相同的销售状态计数器对象),此方法就起作用。

如果列表中有多个具有相同状态的元素,则应使用Collectors.toMap that expects a merge function的重载版本:

Map<SaleStatus, Long> sales = saleStatusCounters.stream()
    .collect(Collectors.toMap(
        obj -> obj.getStatus(),
        obj -> obj.getMatches(),
        Long::sum));


这里的Long::sumBinaryOperator<Long>,它将两个映射到同一键的值合并。

10-08 19:40