Isr*_*ues 2 java lambda java-8
有没有办法在lambda函数内创建这个hashmap?
Map<SaleStatus, Long> sales = new HashMap<>();
saleStatusCounters.forEach(saleStatusCounter -> sales.put(saleStatusCounter.getStatus(), saleStatusCounter.getMatches()));
Run Code Online (Sandbox Code Playgroud)
像这样的东西:
saleStatusCounters.stream()
.map(obj -> new HashMap<SaleStatus, Long>().put(obj.getStatus(), obj.getMatches()))
.collect(Collectors.toMap(???)));
Run Code Online (Sandbox Code Playgroud)
你的代码很好.但是,您可以使用流并Collectors.toMap获得所需的结果:
Map<SaleStatus, Long> sales = saleStatusCounters.stream()
.collect(Collectors.toMap(obj -> obj.getStatus(), obj -> obj.getMatches()));
Run Code Online (Sandbox Code Playgroud)
注意:只要地图中没有碰撞,即只要您没有两个或更多具有相同状态的销售状态计数器对象,此功能就会起作用.
如果列表中有多个具有相同状态的元素,则应使用Collectors.toMap需要合并函数的重载版本:
Map<SaleStatus, Long> sales = saleStatusCounters.stream()
.collect(Collectors.toMap(
obj -> obj.getStatus(),
obj -> obj.getMatches(),
Long::sum));
Run Code Online (Sandbox Code Playgroud)
这Long::sum是一个BinaryOperator<Long>合并两个映射到同一个键的值.