Java Stream API 是 Java 8 引入的一个新的抽象,它允许你以声明性方式处理数据集合(如列表、集合等)。Stream API 提供了丰富的中间操作(如 filter、map、sorted 等)和终端操作(如 collect、forEach、reduce 等),使得数据处理更加简洁和高效。
Java Stream 主要有两种类型:
Stream API 可以用于各种数据处理场景,如过滤、映射、聚合、排序等。
假设我们有一个 Person
类:
public 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;
}
public void setAge(int age) {
this.age = age;
}
}
我们可以使用 Stream API 根据条件赋值:
import java.util.Arrays;
import java.util.List;
public class StreamExample {
public static void main(String[] args) {
List<Person> people = Arrays.asList(
new Person("Alice", 30),
new Person("Bob", 25),
new Person("Charlie", 35)
);
// 根据条件赋值:年龄大于30岁的人,年龄加1
people.stream()
.filter(person -> person.getAge() > 30)
.forEach(person -> person.setAge(person.getAge() + 1));
// 打印结果
people.forEach(person -> System.out.println(person.getName() + ": " + person.getAge()));
}
}
Alice: 30
Bob: 25
Charlie: 36
问题1:Stream API 如何处理空指针异常?
原因:Stream API 中的操作可能会遇到空指针异常,特别是在处理可能为空的对象时。
解决方法:使用 Optional
类来处理可能为空的对象,或者在操作前进行空值检查。
people.stream()
.filter(Objects::nonNull) // 过滤掉空对象
.forEach(person -> {
if (person.getAge() > 30) {
person.setAge(person.getAge() + 1);
}
});
问题2:如何并行处理 Stream?
原因:在处理大数据集时,串行处理可能效率较低。
解决方法:使用并行流(Parallel Stream)来提高处理速度。
people.parallelStream()
.filter(person -> person.getAge() > 30)
.forEach(person -> person.setAge(person.getAge() + 1));
通过以上示例和解释,你应该能够理解如何使用 Java Stream 根据条件赋值,并解决一些常见问题。
领取专属 10元无门槛券
手把手带您无忧上云