java8把实体类List根据属性拆分不同List
时间: 2024-09-14 10:12:34 浏览: 55
在Java 8中,可以利用Stream API中的`partitioningBy`和`collectingAndThen`方法来根据实体类的某个属性拆分不同的List。具体来说,可以使用`Collectors.partitioningBy`收集器,它接受一个分类函数作为参数,并返回一个Map,其键为Boolean类型,值为拆分后的两个列表。以下是一个简单的示例:
```java
import java.util.*;
import java.util.function.Predicate;
import java.util.stream.Collectors;
public class PartitioningExample {
public static void main(String[] args) {
// 假设有一个Person类,我们想根据性别拆分List
List<Person> people = Arrays.asList(
new Person("Alice", Gender.FEMALE),
new Person("Bob", Gender.MALE),
new Person("Carol", Gender.FEMALE),
new Person("Dave", Gender.MALE)
);
// 使用partitioningBy进行拆分
Map<Boolean, List<Person>> partitionedPeople = people.stream()
.collect(Collectors.partitioningBy(p -> p.getGender() == Gender.FEMALE));
// 获取两个列表
List<Person> females = partitionedPeople.get(true);
List<Person> males = partitionedPeople.get(false);
// 输出结果
females.forEach(p -> System.out.println(p.getName() + " is female"));
males.forEach(p -> System.out.println(p.getName() + " is male"));
}
static class Person {
private String name;
private Gender gender;
public Person(String name, Gender gender) {
this.name = name;
this.gender = gender;
}
public String getName() {
return name;
}
public Gender getGender() {
return gender;
}
}
enum Gender {
MALE, FEMALE
}
}
```
在这个例子中,我们根据性别将`Person`对象的列表拆分为两个新的列表,一个是女性列表,另一个是男性列表,并且存储在一个Map中,其中键是`true`(表示女性)和`false`(表示男性)。
阅读全文