📅  最后修改于: 2023-12-03 15:15:54.910000             🧑  作者: Mango
在Java 8中,可以使用lambda表达式和Stream API来便捷地对集合进行分组操作。下面是按照2个属性对集合进行分组的示例代码。
//定义一个Person类
public 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;
}
//getter and setter
}
public class Main {
public static void main(String[] args) {
//定义一组Person数据
List<Person> persons = Arrays.asList(
new Person("张三", 20, "男"),
new Person("李四", 25, "男"),
new Person("小红", 22, "女"),
new Person("小明", 18, "男"),
new Person("小刚", 22, "男"));
//按照name和age对persons进行分组
Map<String, Map<Integer, List<Person>>> result =
persons.stream().collect(Collectors.groupingBy(
Person::getName,
Collectors.groupingBy(Person::getAge)
));
//打印结果
System.out.println(result);
}
}
这段代码将集合中的Person对象按照其name和age两个属性进行分组,并将结果保存在一个Map对象中。其中,第一个groupingBy方法将集合按照name属性进行分组,第二个groupingBy方法将同名的Person对象按照age属性进行分组。
输出结果如下:
{
小明={
18=[
Person{name='小明', age=18, gender='男'}
]
},
李四={
25=[
Person{name='李四', age=25, gender='男'}
]
},
张三={
20=[
Person{name='张三', age=20, gender='男'}
]
},
小红={
22=[
Person{name='小红', age=22, gender='女'}
]
},
小刚={
22=[
Person{name='小刚', age=22, gender='男'}
]
}
}
这种方式不仅可以按照多个属性进行分组,还可以使用各种聚合函数获取分组数据的汇总信息,比如计算平均值、求和等等。
通过Java 8的lambda表达式和Stream API,对集合数据进行分组非常方便和高效。