網頁

2021/4/9

Java Stream 使用 Collectors.groupBy() 將物件集合依屬性條件分類

一個集合使用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)]


沒有留言:

張貼留言