一、基本概念
list.stream().filter是Java 8中常用来处理集合的方法之一,其作用是过滤出满足特定条件的元素,返回一个满足条件的新集合。该方法基于Stream流实现,可以使用Lambda表达式或者方法引用作为条件判断,返回的集合可以是任意类型,例如List、Set等。
二、应用场景
1、过滤出满足某一条件的元素
List<String> strings = Arrays.asList("Java", "Python", "C#", "PHP", "JavaScript");
List<String> result = strings.stream()
.filter(str -> str.length() <= 4)
.collect(Collectors.toList());
上述代码中,我们使用了filter来过滤出字符串长度小于等于4的元素,返回一个新的List。
2、多条件组合筛选
List<Person> people = Arrays.asList(
new Person("Alice", 25),
new Person("Bob", 30),
new Person("Charlie", 35),
new Person("David", 40)
);
List<Person> result = people.stream()
.filter(p -> p.getName().startsWith("A") && p.getAge() >= 25)
.collect(Collectors.toList());
上述代码中,我们使用filter同时筛选出名字以字母"A"开头并且年龄大于等于25岁的人,返回一个新的List。
3、类型转换
List<String> strings = Arrays.asList("1", "2", "3");
List<Integer> result = strings.stream()
.map(Integer::valueOf)
.filter(i -> i <= 2)
.collect(Collectors.toList());
上述代码中,我们先将字符串转换成整型,再使用filter方法过滤出值小于等于2的元素,最后返回一个新的List。
三、代码示例
下面是一个完整的示例代码:
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
//示例1:过滤出满足某一条件的元素
List<String> strings = Arrays.asList("Java", "Python", "C#", "PHP", "JavaScript");
List<String> result1 = strings.stream()
.filter(str -> str.length() <= 4)
.collect(Collectors.toList());
System.out.println(result1); //[Java, C#, PHP]
//示例2:多条件组合筛选
List<Person> people = Arrays.asList(
new Person("Alice", 25),
new Person("Bob", 30),
new Person("Charlie", 35),
new Person("David", 40)
);
List<Person> result2 = people.stream()
.filter(p -> p.getName().startsWith("A") && p.getAge() >= 25)
.collect(Collectors.toList());
System.out.println(result2); //[Person{name='Alice', age=25}]
//示例3:类型转换
List<String> strings2 = Arrays.asList("1", "2", "3");
List<Integer> result3 = strings2.stream()
.map(Integer::valueOf)
.filter(i -> i <= 2)
.collect(Collectors.toList());
System.out.println(result3); //[1, 2]
}
}
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 +
'}';
}
}