Collectors.groupingBy 两个字段
时间: 2023-12-20 16:32:26 浏览: 58
java8 集合 多字段 分组 统计个数代码
5星 · 资源好评率100%
`Collectors.groupingBy`方法可以用于对流中的元素进行分组操作。当需要对两个字段进行分组时,可以使用`Pair`类来表示这两个字段的组合。以下是一个示例代码:
```java
import org.apache.commons.lang3.tuple.Pair;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Person> list = List.of(
new Person("Alice", "A"),
new Person("Bob", "B"),
new Person("Alice", "C"),
new Person("Bob", "D"),
new Person("Charlie", "A")
);
Map<Pair<String, String>, List<Person>> groupedMap = list.stream()
.collect(Collectors.groupingBy(p -> Pair.of(p.getName(), p.getField())));
groupedMap.forEach((key, value) -> System.out.println(key + ": " + value));
}
}
class Person {
private String name;
private String field;
public Person(String name, String field) {
this.name = name;
this.field = field;
}
public String getName() {
return name;
}
public String getField() {
return field;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", field='" + field + '\'' +
'}';
}
}
```
输出结果为:
```
(Alice, A): [Person{name='Alice', field='A'}]
(Bob, B): [Person{name='Bob', field='B'}]
(Alice, C): [Person{name='Alice', field='C'}]
(Bob, D): [Person{name='Bob', field='D'}]
(Charlie, A): [Person{name='Charlie', field='A'}]
```
这段代码将根据`name`和`field`字段对`Person`对象进行分组,并将结果存储在`Map<Pair<String, String>, List<Person>>`中。每个键值对表示一个组合,键是`Pair`对象,值是对应的`Person`对象列表。
阅读全文