Java 多字段分组
时间: 2023-08-27 18:03:55 浏览: 100
java8 集合 多字段 分组 统计个数代码
5星 · 资源好评率100%
你可以使用 Java 8 的 Stream API 和 Collectors 工具类来实现多字段分组。以下是一个示例代码:
```java
// 定义一个 Person 类,有 name、age、gender 三个字段
class Person {
private String name;
private int age;
private String gender;
public Person(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getGender() {
return gender;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
'}';
}
}
// 根据 name 和 gender 两个字段进行分组
List<Person> people = Arrays.asList(
new Person("Alice", 20, "female"),
new Person("Bob", 25, "male"),
new Person("Charlie", 30, "male"),
new Person("David", 35, "male"),
new Person("Eva", 40, "female"),
new Person("Frank", 45, "male")
);
Map<List<Object>, List<Person>> groups = people.stream()
.collect(Collectors.groupingBy(p -> Arrays.asList(p.getName(), p.getGender())));
// 输出分组结果
groups.forEach((key, value) -> {
System.out.println("Group: " + key);
System.out.println("Members: " + value);
});
```
在上述代码中,我们定义了一个 Person 类,包含三个字段 name、age 和 gender。然后我们使用 Stream API 的 `groupingBy` 方法,根据 name 和 gender 两个字段进行分组。`groupingBy` 方法的参数是一个 Function,它返回一个用于分组的键值。在这里,我们使用了 `Arrays.asList` 方法来创建一个包含两个字段值的列表作为键值。最终,我们得到了一个 Map,其中键是一个列表,包含了 name 和 gender 两个字段的值,值是一个 Person 对象列表,表示该分组下的所有人员。
阅读全文