1 简介
-
在Java8 API中增添了新的抽象类Stream,将待处理的元素集和视作一种流,并在管道中传输,且可在管道的节点上进行多种处理,比如排序、筛选、聚合等。
-
因此,在Java8及以上版本中,可利用stream().filter来筛选出理想的结果,也即根据条件来查找对象集和。
2 代码示例
下面为一个简单的示例:新建了一个类Fruit,包含两个成员变量price和name;使用List来存储Fruit类型的变量,然后由stream().filter来筛选符号条件的集和。
import java.io.*;
import java.util.*;
import java.util.stream.Collectors;
public class stream_filter {
public static void main(String[] args) throws IOException{
List<Fruit> fruits = new ArrayList<Fruit>();
fruits.add(new Fruit("Apple", 9.9));
fruits.add(new Fruit("Orange", 12.5));
fruits.add(new Fruit("Banana", 15.9));
//展示原始的水果列表
System.out.println(">>>>>> Before filter: ");
for(Fruit r : fruits){
System.out.println("Name: " + r.name + ", Price: " + r.price);
}
//filter-1: 筛选出水果价格大于10.0的
List<Fruit> res1 = fruits.stream().filter(f -> f.getPrice() > 10.0).collect(Collectors.toList());
System.out.println(">>>>>> After filter-1: ");
for( Fruit r : res1){
System.out.println("Name: " + r.name + ", Price: " + r.price);
}
//filter-2: 筛选出水果名称为"Apple"的
List<Fruit> res2 = fruits.stream().filter(f -> "Apple".equals(f.getName())).collect(Collectors.toList());
System.out.println(">>>>>> After filter-2: ");
for( Fruit r : res2){
System.out.println("Name: " + r.name + ", Price: " + r.price);
}
}
public static class Fruit{
String name;
double price;
public Fruit(String name, double price) {
this.name = name;
this.price = price;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setPrice(double price) {
this.price = price;
}
public double getPrice() {
return this.price;
}
}
}
3 输出结果
输出结果为: