Java 如何在lambda函数中创建一个HashMap进行迭代?
有没有办法在lambda函数中创建这个hashmapJava 如何在lambda函数中创建一个HashMap进行迭代?,java,lambda,java-8,Java,Lambda,Java 8,有没有办法在lambda函数中创建这个hashmap Map<SaleStatus, Long> sales = new HashMap<>(); saleStatusCounters.forEach(saleStatusCounter -> sales.put(saleStatusCounter.getStatus(), saleStatusCounter.getMatches())); Map sales=newhashmap(); f
Map<SaleStatus, Long> sales = new HashMap<>();
saleStatusCounters.forEach(saleStatusCounter -> sales.put(saleStatusCounter.getStatus(), saleStatusCounter.getMatches()));
Map sales=newhashmap();
forEach(saleStatusCounter->sales.put(saleStatusCounter.getStatus(),saleStatusCounter.getMatches());
大概是这样的:
saleStatusCounters.stream()
.map(obj -> new HashMap<SaleStatus, Long>().put(obj.getStatus(), obj.getMatches()))
.collect(Collectors.toMap(???)));
saleStatusCounters.stream()
.map(obj->newhashmap().put(obj.getStatus(),obj.getMatches())
.collect(Collectors.toMap(?);
您的代码很好。尽管如此,您仍然可以使用streams并获得所需的结果:
Map<SaleStatus, Long> sales = saleStatusCounters.stream()
.collect(Collectors.toMap(obj -> obj.getStatus(), obj -> obj.getMatches()));
这里的
Long::sum
是一个将映射到同一个键的两个值合并在一起的函数。Read….您实际上想在这里做什么?为什么Collectors.toMap
不够?或者SaleStatus::getStatus,SaleStatus::getMatches
?@chrylis好吧,我没有这个类的名字,SaleStatus
是getStatus()
方法返回的。对了,我在Groovy世界生活了这么久,对我来说就是it.status
@是的!Groovy非常有表现力。我正在学习它,虽然我实际上并没有使用它。
Map<SaleStatus, Long> sales = saleStatusCounters.stream()
.collect(Collectors.toMap(
obj -> obj.getStatus(),
obj -> obj.getMatches(),
Long::sum));