Java Stream过滤属性
在Java程序开发中,我们经常需要对一个集合进行过滤操作,筛选出符合条件的元素。Java 8引入的Stream API为我们提供了一种更简洁、优雅的方式来处理集合数据。通过Stream API,我们可以轻松地对集合进行过滤、映射、排序等操作。
本文将重点介绍如何使用Java Stream来过滤集合中的属性,并给出相应的代码示例。
Stream简介
Stream是Java 8引入的一个新的API,它提供了一种高效且易于理解的处理集合数据的方式。通过Stream API,我们可以将集合转化为一个流,然后对该流进行各种操作,最后得到我们需要的结果。
Stream API有两种操作:Intermediate(中间操作)和Terminal(终结操作)。中间操作用于对流进行处理,例如过滤、映射、排序等;终结操作用于触发流的处理,并返回最终结果。
过滤属性
有时候,我们需要对集合中的对象的某个属性进行过滤,只保留满足条件的对象。例如,我们有一个包含员工信息的列表,我们想要筛选出年龄大于30岁的员工。这时,我们可以使用Stream API来实现这个功能。
下面是一个简单的Employee类的定义:
public class Employee {
private String name;
private int age;
public Employee(String name, int age) {
this.name = name;
this.age = age;
}
// 省略getter和setter方法
}
假设我们有一个包含Employee对象的列表,我们想要筛选出年龄大于30岁的员工,可以使用Stream的filter()方法来实现:
List<Employee> employees = Arrays.asList(
new Employee("Alice", 25),
new Employee("Bob", 35),
new Employee("Cathy", 40)
);
List<Employee> result = employees.stream()
.filter(e -> e.getAge() > 30)
.collect(Collectors.toList());
result.forEach(e -> System.out.println(e.getName() + " - " + e.getAge()));
上面的代码首先创建了一个包含Employee对象的列表,然后使用Stream的filter()方法筛选出年龄大于30岁的员工,最后将结果收集到一个新的列表中并打印出来。
示例
下面我们通过一个完整的示例来演示如何使用Stream过滤属性。假设我们有一个包含商品信息的列表,每个商品包含名称和价格两个属性。我们想要筛选出价格低于100的商品。
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Product {
private String name;
private double price;
public Product(String name, double price) {
this.name = name;
this.price = price;
}
public String getName() {
return name;
}
public double getPrice() {
return price;
}
public static void main(String[] args) {
List<Product> products = Arrays.asList(
new Product("A", 50.0),
new Product("B", 150.0),
new Product("C", 80.0)
);
List<Product> result = products.stream()
.filter(p -> p.getPrice() < 100)
.collect(Collectors.toList());
result.forEach(p -> System.out.println(p.getName() + " - " + p.getPrice()));
}
}
上面的代码中,我们首先创建了一个包含Product对象的列表,然后使用Stream的filter()方法筛选出价格低于100的商品,最后将结果收集到一个新的列表中并打印出来。
通过这个示例,我们可以看到使用Stream API来过滤属性非常简洁和易于理解,大大提高了代码的可读性和可维护性。
关系图
下面是一个示意图,表示Employee和Product类的关系:
erDiagram
Employee {
String name
int age
}
Product {
String name
double price
}
甘特图
下面是一个示意图,表示Stream过滤属性的流程:
gantt
title Stream过滤属性
section 过滤属性
确定需求: done, 2022-01-01, 2022-