Java List 分组:根据字段将列表拆分成多个列表
可以使用Java 8的Stream API来实现将一个List按照某个字段分组成多个List的操作。
假设有一个包含Person对象的List,每个Person对象都有一个字段age,我们要按照age字段将这个List分组成多个List。可以按照以下步骤实现:
-
根据age字段对List进行分组,使用Collectors.groupingBy()方法,参数为一个Function,表示按照哪个字段进行分组。返回的结果是一个Map,其中key是分组的字段的值,value是该分组的List。
-
可以通过调用Map的values()方法,获取所有分组的List。
下面是一个示例代码:
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class GroupListByField {
public static void main(String[] args) {
List<Person> persons = new ArrayList<>();
persons.add(new Person('Alice', 20));
persons.add(new Person('Bob', 25));
persons.add(new Person('Charlie', 20));
persons.add(new Person('David', 30));
// 按照age字段分组
Map<Integer, List<Person>> groupedMap = persons.stream()
.collect(Collectors.groupingBy(Person::getAge));
// 获取所有分组的List
List<List<Person>> groupedLists = new ArrayList<>(groupedMap.values());
// 打印分组结果
for (List<Person> group : groupedLists) {
System.out.println('Group:');
for (Person person : group) {
System.out.println(person.getName() + ' - ' + person.getAge());
}
}
}
}
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;
}
}
输出结果为:
Group:
Alice - 20
Charlie - 20
Group:
Bob - 25
Group:
David - 30
可以看到,根据age字段分组后,20岁的有两个人,25岁的有一个人,30岁的有一个人。这样就将一个List按照某个字段分组成了多个List。
原文地址: https://www.cveoy.top/t/topic/qB8H 著作权归作者所有。请勿转载和采集!