簡體   English   中英

使用Java 8連接集合

[英]Concatenate Collections with Java 8

我想迭代一系列集合。 有了番石榴,我會這樣做:

import static com.google.collections.Iterables.*;

class Group {
    private Collection<Person> persons;
    public Collection<Person> getPersons();
}

class Person {
    private String name;
    public String getName();
}

Collection<Group> groups = ...;
Iterable<Person> persons = concat(transform(groups, Group::getPersons()));
Iterable<String> names = transform(persons, Person::getName);

但是我怎么能用Java 8流做同樣的事情呢?

groups.stream().map(Group::getPersons())...?
Stream<Person> persons = groups.stream().flatMap(g -> g.getPersons().stream());

您可以通過將流的所有元素平面映射到流中來實現此目的。

讓我用這段代碼解釋一下:

groups.stream()
        .flatMap(group -> group.getPersons().stream());

你在這里做的是:

  1. 獲取Stream<Collection<Group>>
  2. 然后將每個獲得的Stream<Person>從一個Group平面映射回原始流,該流是Stream<Person>類型。

現在在flatMap() ,您可以使用獲得的Stream<Person>執行任何操作。

我想你需要flatMap

Stream<Person> persons = groups.stream().flatMap(g -> g.getPersons().stream());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM