在Java中,flatMap
是Stream API的一個操作,它可以將多個Stream合并成一個Stream。當你需要處理復雜數據時,可以使用flatMap
來簡化操作。下面是一個簡單的例子,說明如何使用flatMap
處理復雜數據。
假設我們有一個Person
類,其中包含一個List<Address>
類型的屬性addresses
。我們需要將每個人的地址扁平化為一個Stream,然后對這些地址進行處理。
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
class Person {
private String name;
private List<Address> addresses;
public Person(String name, List<Address> addresses) {
this.name = name;
this.addresses = addresses;
}
public String getName() {
return name;
}
public List<Address> getAddresses() {
return addresses;
}
}
class Address {
private String street;
private String city;
public Address(String street, String city) {
this.street = street;
this.city = city;
}
public String getStreet() {
return street;
}
public String getCity() {
return city;
}
}
public class FlatMapExample {
public static void main(String[] args) {
List<Person> people = new ArrayList<>();
people.add(new Person("Alice", new ArrayList<>(List.of(
new Address("123 Main St", "New York"),
new Address("456 Broadway", "New York")
))));
people.add(new Person("Bob", new ArrayList<>(List.of(
new Address("789 Elm St", "Los Angeles"),
new Address("321 Pine St", "Los Angeles")
))));
List<String> addresses = people.stream()
.flatMap(person -> person.getAddresses().stream())
.collect(Collectors.toList());
addresses.forEach(System.out::println);
}
}
在這個例子中,我們首先創建了一個Person
對象的列表。然后,我們使用flatMap
操作將這些人的地址扁平化為一個Stream。最后,我們將這些地址收集到一個新的列表中,并打印出來。
flatMap
操作的關鍵是提供一個將多個Stream合并成一個Stream的函數。在這個例子中,我們使用lambda表達式person -> person.getAddresses().stream()
來實現這個功能。這個lambda表達式接收一個Person
對象,然后返回一個包含該人所有地址的Stream。通過將多個這樣的Stream合并,我們可以輕松地處理復雜的數據結構。