按多个键分组流是指根据多个键对数据流进行分组。下面是一个使用Java代码示例的解决方法:
import java.util.*;
import java.util.stream.Collectors;
public class GroupingByMultipleKeysExample {
public static void main(String[] args) {
List persons = Arrays.asList(
new Person("Alice", 25, "New York"),
new Person("Bob", 30, "London"),
new Person("Charlie", 35, "New York"),
new Person("David", 40, "London"),
new Person("Eve", 25, "New York")
);
// 根据年龄和城市分组
Map>> groupedData = persons.stream()
.collect(Collectors.groupingBy(Person::getCity,
Collectors.groupingBy(Person::getAge)));
// 打印分组结果
for (Map.Entry>> entry : groupedData.entrySet()) {
String city = entry.getKey();
System.out.println("City: " + city);
Map> ageGroup = entry.getValue();
for (Map.Entry> ageEntry : ageGroup.entrySet()) {
int age = ageEntry.getKey();
System.out.println(" Age: " + age);
List people = ageEntry.getValue();
for (Person person : people) {
System.out.println(" " + person.getName());
}
}
}
}
}
class Person {
private String name;
private int age;
private String city;
public Person(String name, int age, String city) {
this.name = name;
this.age = age;
this.city = city;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getCity() {
return city;
}
}
在上述示例中,我们创建了一个Person
类来表示人员信息,每个人有姓名、年龄和所在城市。然后我们创建了一个persons
列表,包含了一些人员信息。我们使用Java 8的流操作来对人员信息进行分组,首先根据城市分组,然后在每个城市的分组内再根据年龄分组。最终,我们得到了一个嵌套的Map
对象,其中外层的Map
的键是城市,内层的Map
的键是年龄,值是对应的人员列表。
通过遍历分组结果,我们可以打印出每个城市和年龄组的人员信息。