可以使用Java 8的Stream API来对List中的元素按照某个字段进行分组操作。

假设有一个Person类,包含name和age两个字段:

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

现在有一个List,需要按照年龄进行分组:

List<Person> persons = Arrays.asList(
        new Person("Tom", 20),
        new Person("Jack", 30),
        new Person("Alice", 20),
        new Person("Bob", 30)
);

Map<Integer, List<Person>> result = persons.stream()
        .collect(Collectors.groupingBy(Person::getAge));

上面的代码使用stream()方法创建Stream,然后使用groupingBy()方法按照年龄进行分组,返回一个Map<Integer, List>。Map中的key为年龄,value为这个年龄下的所有Person对象。

输出结果:

{20=[Person{name='Tom', age=20}, Person{name='Alice', age=20}], 30=[Person{name='Jack', age=30}, Person{name='Bob', age=30}]}

如果需要按照其他字段进行分组,只需要将groupingBy()方法中的参数改为对应的方法引用即可。例如,按照姓名进行分组:

Map<String, List<Person>> result = persons.stream()
        .collect(Collectors.groupingBy(Person::getName));
``
java的list指定某个字段分组

原文地址: https://www.cveoy.top/t/topic/cI0W 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录