📜  java 8 按 2 属性对集合进行分组 - Java (1)

📅  最后修改于: 2023-12-03 15:15:54.910000             🧑  作者: Mango

Java 8按2属性对集合进行分组

在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,对集合数据进行分组非常方便和高效。