CR7*_*CR7 3 collections lambda java-8 java-stream
假设我有一个List<Banana> bananas.Banana类的定义如下:
Banana.java
public class Banana{
String name;
Long weight;
Long price;
// getters & setters
}
Run Code Online (Sandbox Code Playgroud)
在香蕉列表包含:
[
{"banana1", 10, 20},
{"banana1", 10, 20},
{"banana1", 10, 20},
{"banana2", 20, 30},
{"banana2", 30, 30},
{"banana3", 50, 40},
]
Run Code Online (Sandbox Code Playgroud)
我想在这里做的是分组香蕉的名称,其中总和权重列和价格列(每个单独),以便我可以得到这个结果:
[
{"banana1", 30, 60},
{"banana2", 50, 60},
{"banana3", 50, 40},
]
Run Code Online (Sandbox Code Playgroud)
提前致谢.
您可以Collectors.toMap使用合并功能对它们进行分组:
Map<String,Banana> bananasByName =
bananas.stream()
.collect(Collectors.toMap(Banana::getName,
Function.identity(),
(b1,b2)->{
b1.addWeightAndPrice(b2); return b1;
}));
Run Code Online (Sandbox Code Playgroud)
类addWeightAndPrice的实例方法在哪里Banana,将传递的权重和价格添加Banana到Banana调用它的实例.
如果您不想改变原始Banana实例,可以更改合并功能以创建新Banana实例,并向其添加两个输入Banana实例的权重和价格.
| 归档时间: |
|
| 查看次数: |
465 次 |
| 最近记录: |