java的list指定某个字段分组
可以使用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
输出结果:
{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));
``
原文地址: https://www.cveoy.top/t/topic/cI0W 著作权归作者所有。请勿转载和采集!