Java 8 中以多個欄位分組
在Java 8 中,Collectors.groupingBy() 方法通常用於根據一個特定的領域。但是,如果您需要按同一 POJO 中的多個欄位進行分組怎麼辦?
有多種可用選項:
連結收集器
Map<String, Map<Integer, List<Person>>> map = people .collect(Collectors.groupingBy(Person::getName, Collectors.groupingBy(Person::getAge));
此程式碼先按名稱然後按年齡對 Person物件進行分組,從而產生巢狀映射
定義分組類別
class Person { record NameAge(String name, int age) { } public NameAge getNameAge() { return new NameAge(name, age); } } Map<NameAge, List<Person>> map = people.collect(Collectors.groupingBy(Person::getNameAge));
透過建立封裝分組條件(例如NameAge)的記錄或類,您可以直接按分組所需欄位。
使用一對類別
import org.apache.commons.lang3.tuple.Pair; Map<Pair<String, Integer>, List<Person>> map = people .collect(Collectors.groupingBy(p -> Pair.of(p.getName(), p.getAge())));
如果您使用的是第三方函式庫,您可以利用其pair類別來表示分組標準。
選擇最佳選項
方法的選擇取決於您的特定要求項目:
以上是如何使用「Collectors.groupingBy()」在 Java 8 中按多個欄位進行分組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!