Optional 和 Stream API 都是 Java 8 引入的新特性,它们可以很好地结合使用,以便更简洁、高效地处理数据。Optional 主要用于解决空指针异常问题,而 Stream API 则提供了一种更为声明式的方式来处理集合数据。
以下是一些 Optional 和 Stream API 结合使用的示例:
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<String> names = Arrays.asList("John", "Jane", "Tom", "Jerry");
Optional<String> optionalName = names.stream()
.filter(name -> name.startsWith("J"))
.findFirst();
optionalName.ifPresent(name -> System.out.println("Found name: " + name));
}
}
在这个例子中,我们使用 Stream API 过滤出以 “J” 开头的名字,然后使用 findFirst() 方法获取第一个匹配的元素。findFirst() 返回一个 Optional 对象,我们可以使用 ifPresent() 方法来处理找到的元素。
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
public class Main {
public static void main(String[] args) {
List<Person> people = Arrays.asList(
new Person("John", new Address("New York")),
new Person("Jane", null),
new Person("Tom", new Address("Los Angeles"))
);
Optional<Address> addressOptional = people.stream()
.map(Person::getAddress)
.filter(Optional::isPresent)
.map(Optional::get)
.findFirst();
addressOptional.ifPresent(address -> System.out.println("First address city: " + address.getCity()));
}
static class Person {
private String name;
private Address address;
public Person(String name, Address address) {
this.name = name;
this.address = address;
}
public Address getAddress() {
return address;
}
}
static class Address {
private String city;
public Address(String city) {
this.city = city;
}
public String getCity() {
return city;
}
}
}
在这个例子中,我们有一个包含 Person 对象的列表,每个 Person 对象都有一个 Address 对象。我们想要找到第一个具有非空地址的人,并打印其城市名称。我们使用 Stream API 的 map() 方法提取地址,然后使用 filter() 方法过滤掉空的 Optional 对象。最后,我们使用 findFirst() 方法获取第一个匹配的元素,并使用 ifPresent() 方法处理找到的地址。
这些示例展示了如何将 Optional 和 Stream API 结合使用,以便更简洁、高效地处理数据。在实际应用中,你可以根据具体需求灵活地运用这些特性。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。