La flatMap()
El método se puede utilizar para combinar un flujo de flujos con un flujo de objetos. En esta publicación, mostraré cómo usar flatMap () usando varios casos de uso.
Caso de uso 1
Suponga que tiene una lista de pedidos y cada pedido contiene una lista de artículos.
class Order{ String orderId; ArrayList<Item> items = new ArrayList<Item>(); // ... } class Item{ String itemId; String itemName; // ... } |
Si desea obtener todos los elementos en todos los pedidos, puede usar flatMap () para nivelar el flujo de transmisiones.
ArrayList<Order> orders = new ArrayList<Order>(); Stream<Item> itemStream = orders.stream().flatMap(order -> order.getItems().stream()); |
Caso de uso 2
Si desea obtener un flujo de palabras, puede usar el siguiente código:
Path path = Paths.get("/tmp/foo"); Stream<String> lines = Files.lines(path, StandardCharsets.UTF_8); Stream<String> words = lines.flatMap(line -> Stream.of(line.split("W+"))); //Split by non-word characters |
Cada línea del archivo se convierte primero en un flujo de palabras y luego todos esos flujos se combinan en un solo flujo.
Referencia:
Documento Java de Stream.flatMap ()