Java中的flatMap是一個強大的工具,它可以將嵌套的流或集合扁平化為一個流。要簡化代碼,您可以使用flatMap來替代多個嵌套的循環或者使用多個Stream操作。以下是一些示例:
假設我們有一個Person
類,其中包含一個List<Address>
:
public class Person {
private String name;
private List<Address> addresses;
// 構造函數、getter和setter方法
}
public class Address {
private String street;
private String city;
// 構造函數、getter和setter方法
}
示例1:將嵌套的List扁平化為一個Stream:
List<Person> people = // ... 初始化Person列表
Stream<String> names = people.stream()
.flatMap(person -> person.getAddresses().stream()
.map(Address::getStreet));
示例2:將多個Stream操作合并為一個:
List<Person> people = // ... 初始化Person列表
Stream<String> namesAndCities = people.stream()
.flatMap(person -> person.getAddresses().stream()
.map(Address::getStreet)
.collect(Collectors.toList())
.stream()
.collect(Collectors.groupingBy(street -> street, Collectors.counting()));
示例3:將嵌套的Optional扁平化為一個Stream:
List<Person> people = // ... 初始化Person列表
Stream<String> names = people.stream()
.flatMap(person -> Optional.ofNullable(person.getName()).stream());
通過使用flatMap,您可以減少代碼的復雜性,使其更易于閱讀和維護。