有什么方法可以在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::sum
是BinaryOperator<Long>
,它将两个映射到同一键的值合并。