在Java中,flatMap
是Stream API的一个操作,它可以将多个Stream合并成一个Stream。当你需要处理复杂数据时,可以使用flatMap
来简化操作。下面是一个简单的例子,说明如何使用flatMap
处理复杂数据。
假设我们有一个Person
类,其中包含一个List
类型的属性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 addresses; public Person(String name, List addresses) { this.name = name; this.addresses = addresses; } public String getName() { return name; } public List 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) { Listpeople = 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 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合并,我们可以轻松地处理复杂的数据结构。