group by 多个字段 通过java实现
时间: 2023-08-01 10:10:14 浏览: 113
要通过Java实现多字段的group by,可以使用Java的Stream API和Collectors类来完成。下面是一个示例:
假设有一个Person类,具有name和age两个字段,我们要按照name和age进行group by。首先,我们需要创建一个包含多个Person实例的列表:
```java
List<Person> persons = new ArrayList<>();
persons.add(new Person("Alice", 25));
persons.add(new Person("Bob", 30));
persons.add(new Person("Alice", 35));
persons.add(new Person("Bob", 35));
persons.add(new Person("Alice", 25));
```
然后,使用Stream API和Collectors.groupingBy方法来实现多字段的group by:
```java
Map<List<Object>, List<Person>> groupedPersons = persons.stream()
.collect(Collectors.groupingBy(p -> Arrays.asList(p.getName(), p.getAge())));
```
这里使用了Arrays.asList方法来创建一个包含name和age的列表作为group by的键。groupedPersons是一个Map对象,其中键是name和age组成的列表,值是对应的Person对象列表。
你可以根据需要进一步处理groupedPersons Map对象,例如遍历打印结果:
```java
for (Map.Entry<List<Object>, List<Person>> entry : groupedPersons.entrySet()) {
List<Object> key = entry.getKey();
List<Person> value = entry.getValue();
System.out.println("Group: " + key);
System.out.println("Persons: " + value);
System.out.println();
}
```
输出结果:
```
Group: [Bob, 35]
Persons: [Person{name='Bob', age=35}]
Group: [Alice, 25]
Persons: [Person{name='Alice', age=25}, Person{name='Alice', age=25}]
Group: [Alice, 35]
Persons: [Person{name='Alice', age=35}]
```
这样就实现了通过Java进行多字段的group by。你可以根据实际需求修改代码和数据类型。
阅读全文