使用stream流多条件分组聚合
时间: 2023-10-24 12:09:08 浏览: 97
Java Stream 流的使用过程解析
你可以使用流(Stream)的多条件分组聚合来实现。在Java 8及以上版本中,你可以使用`Collectors.groupingBy`方法进行分组,并传递一个`Collector`作为参数来进行聚合操作。
下面是一个示例代码,假设你有一个包含Person对象的列表,每个Person对象都有年龄和性别属性:
```java
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Person> persons = Arrays.asList(
new Person("Alice", 25, Gender.FEMALE),
new Person("Bob", 30, Gender.MALE),
new Person("Charlie", 35, Gender.MALE),
new Person("Diana", 25, Gender.FEMALE),
new Person("Emily", 30, Gender.FEMALE)
);
Map<Gender, Map<Integer, List<Person>>> groupedPersons = persons.stream()
.collect(Collectors.groupingBy(Person::getGender, Collectors.groupingBy(Person::getAge)));
System.out.println(groupedPersons);
}
}
class Person {
private String name;
private int age;
private Gender gender;
public Person(String name, int age, Gender gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
// getters and setters
@Override
public String toString() {
return name;
}
}
enum Gender {
MALE, FEMALE
}
```
在上面的示例中,我们首先将Person对象列表转换为流,然后使用`Collectors.groupingBy`方法对性别进行分组。在内部的`Collectors.groupingBy`中,我们再次使用年龄进行分组。这样就可以按照性别和年龄对Person对象进行多条件分组聚合。
输出结果将是一个`Map<Gender, Map<Integer, List<Person>>>`,其中外层的Map的键是性别,内层的Map的键是年龄,值是满足该性别和年龄的Person对象列表。
你可以根据你的实际需求对代码进行修改,并根据自己的属性和条件来进行分组和聚合操作。希望对你有帮助!如果有任何疑问,请随时提问。
阅读全文