JAVA对list的数据按docCode属性进行分组,对qty求和,最后形成一个新的list
时间: 2024-03-13 16:45:08 浏览: 151
可以使用Java 8的Stream API来实现对list的数据按docCode属性进行分组,对qty求和,最后形成一个新的list。具体代码实现如下:
```java
import java.util.*;
import java.util.stream.Collectors;
public class GroupListByProperty {
public static void main(String[] args) {
List<Item> itemList = Arrays.asList(
new Item("A001", "item1", 10),
new Item("A001", "item2", 20),
new Item("A002", "item3", 30),
new Item("A002", "item4", 40),
new Item("A003", "item5", 50)
);
Map<String, Integer> qtyByDocCode = itemList.stream()
.collect(Collectors.groupingBy(Item::getDocCode, Collectors.summingInt(Item::getQty)));
List<ItemSummary> itemSummaryList = qtyByDocCode.entrySet().stream()
.map(entry -> new ItemSummary(entry.getKey(), entry.getValue()))
.collect(Collectors.toList());
System.out.println(itemSummaryList);
}
}
class Item {
private String docCode;
private String itemName;
private int qty;
public Item(String docCode, String itemName, int qty) {
this.docCode = docCode;
this.itemName = itemName;
this.qty = qty;
}
public String getDocCode() {
return docCode;
}
public String getItemName() {
return itemName;
}
public int getQty() {
return qty;
}
}
class ItemSummary {
private String docCode;
private int totalQty;
public ItemSummary(String docCode, int totalQty) {
this.docCode = docCode;
this.totalQty = totalQty;
}
public String getDocCode() {
return docCode;
}
public int getTotalQty() {
return totalQty;
}
@Override
public String toString() {
return "ItemSummary{" +
"docCode='" + docCode + '\'' +
", totalQty=" + totalQty +
'}';
}
}
```
这段代码中,首先定义了一个Item类,用于表示list中的每个元素,包括docCode、itemName和qty三个属性。然后定义了一个ItemSummary类,用于表示最终的分组求和结果,包括docCode和totalQty两个属性。
在main方法中,首先定义了一个itemList,用于存储原始数据。然后使用Java 8的Stream API,先对itemList进行分组,按照docCode属性进行分组,对qty属性进行求和,得到一个Map<String, Integer>类型的结果qtyByDocCode。最后,使用Stream API中的map和collect方法,将qtyByDocCode转换成最终的itemSummaryList,即按照docCode属性分组后,对qty属性求和的结果。
上述代码执行结果为:
```
[ItemSummary{docCode='A001', totalQty=30}, ItemSummary{docCode='A002', totalQty=70}, ItemSummary{docCode='A003', totalQty=50}]
```
其中,每个ItemSummary对象表示一个docCode属性值对应的qty属性值之和。
阅读全文