一個集合使用Java 8 Stream管線操作時,若要依集合中物件的某屬性條件分成多組,可使用Collectors.groupingBy()
。
集合中的元素類別Item
如下。
Item
package com.abc.demo;
import lombok.Data;
@Data
public class Item {
private long id;
private String type;
private int value;
public Item(long id, String type, int value) {
this.id = id;
this.type = type;
this.value = value;
}
}
例如下面使用Collectors.groupingBy()
將List<Item>
依屬性type
分組。因為值有A、B、C,所以分為三組。
List<Item> itemList = Arrays.asList(
new Item(1, "A", 10),
new Item(2, "A", 12),
new Item(3, "B", 20),
new Item(4, "B", 23),
new Item(5, "C", 99)
);
Map<String, List<Item>> groupedItemMap =
itemList.stream()
.collect(Collectors.groupingBy(Item::getType)); // 依type屬性分組
System.out.println(groupedItemMap.keySet()); // [A, B, C]
System.out.println(groupedItemMap.get("A")); // [Item(id=1, type=A, value=10), Item(id=2, type=A, value=12)]
System.out.println(groupedItemMap.get("B")); // [Item(id=3, type=B, value=20), Item(id=4, type=B, value=23)]
System.out.println(groupedItemMap.get("C")); // [Item(id=5, type=C, value=99)]
沒有留言:
張貼留言