我有這個類的對象的列表:如何將對象與列表中具有相同值的兩個字段組合爲一個縮小列表?
class Item
{
private String name;
private String parentName;
private Integer someValue;
private Double anotherValue;
public Item() {}
//...elided getters/setters...
}
我有這些與值的列表:
//PSEUDO CODE (Not JavaScript, but using JSON is easier to follow)
List<Item> items = [
{
"name": "Joe",
"parentName": "Frank",
"someValue": 10,
"anotherValue": 15.0
},
{
"name": "Joe",
"parentName": "Frank",
"someValue": 40,
"anotherValue": 0.5
},
{
"name": "Joe",
"parentName": "Jack",
"someValue": 10,
"anotherValue": 10.0
},
{
"name": "Jeff",
"parentName": "Frank",
"someValue": 10,
"anotherValue": 10.0
}
];
我想這是合併到這個列表:
List<Item> items = [
{
"name": "Joe",
"parentName": "Frank",
"someValue": 50,
"anotherValue": 15.5
},
{
"name": "Joe",
"parentName": "Jack",
"someValue": 10,
"anotherValue": 10.0
},
{
"name": "Jeff",
"parentName": "Frank",
"someValue": 10,
"anotherValue": 10.0
}
];
基本上規則是:
- 如果用戶名和parentName都在兩個對象是相同的:
- 它們合併成一個對象
- 琛的「someValue中」場
- 琛的「anotherValue」字段
- 如果其中一個name或parentName是diff,不要組合
我該如何在Java 8流中執行此操作?
我開始把它們放入桶(見下文),但我不知道在哪裏何去何從:
items
.stream()
.collect(
Collectors.groupingBy(
item -> new ArrayList<String>(Arrays.asList(item.getName(), item.getParentName()))
)
);