我们经常需要对List进行筛选,以满足业务需求。而根据某个字段进行筛选是一种常见的需求,本文将介绍如何使用Java 8的Stream API来实现这一功能。假设我们有一个Person类,包含id、name和age三个字段:
public class Person {
private int id;
private String name;
private int age; public Person(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
} public int getId() {
return id;
} public String getName() {
return name;
} public int getAge() {
return age;
}
}
现在我们有一个List,需要根据age字段筛选出年龄大于等于18岁的人。传统的做法是使用for循环遍历List,然后逐个判断每个Person的age字段是否符合条件。但是这种做法比较繁琐,而且代码可读性不高。使用Java 8的Stream API可以更加简洁地实现这一功能。首先,我们需要将List转换成Stream,然后使用filter方法进行筛选。filter方法接受一个Predicate参数,用于判断每个元素是否符合条件。在本例中,我们需要判断每个Person的age字段是否大于等于18岁,因此可以使用lambda表达式来实现:
List<Person> persons = ...;
List<Person> filteredPersons = persons.stream()
.filter(person -> person.getAge() >= 18)
.collect(Collectors.toList());
上述代码中,我们使用stream方法将List转换成Stream,然后使用filter方法进行筛选。最后使用collect方法将筛选后的结果转换成List。除了使用lambda表达式,我们还可以使用方法引用来实现筛选。在本例中,我们可以使用Person::getAge方法引用来获取每个Person的age字段:
List<Person> persons = ...;
List<Person> filteredPersons = persons.stream()
.filter(person -> person.getAge() >= 18)
.collect(Collectors.toList());
上述代码中,我们使用Person::getAge方法引用来获取每个Person的age字段,然后使用lambda表达式来判断是否大于等于18岁。总结本文介绍了如何使用Java 8的Stream API来根据某个字段筛选List。使用Stream API可以更加简洁地实现这一功能,而且代码可读性更高。在实际开发中,我们可以根据具体业务需求来选择使用lambda表达式或方法引用来实现筛选。