Объединение 2 потоков из одного и того же объекта в Java - PullRequest
6 голосов
/ 10 июля 2019

У меня есть список объектов класса A, определенный следующим образом:

class A {
    private Set<String> sOne;
    private Set<String> sTwo;
    // Constructor, getters and setters
}

Теперь я хотел бы создать поток, который содержит элементы sOne и stwo.Есть ли способ сделать это в Java 8?

Ответы [ 3 ]

5 голосов
/ 10 июля 2019

Вы можете объединить их, используя:

List<A> aList = ...;

Stream<String> stream = aList.stream()
                             .flatMap(a -> Stream.concat(
                                      a.getsOne().stream(), 
                                      a.getsTwo().stream())
                              );
5 голосов
/ 10 июля 2019
Stream.concat(sOne.stream(), sTwo.stream())

Вы просто должны знать, что в некоторых случаях это снижает некоторые характеристики IIRC.

1 голос
/ 10 июля 2019

Альтернативой уже упомянутым Stream::concat является Stream::of:

Stream.of(sOne.stream(), sTwo.stream())
      .flatMap(Function.identity())
      ...

Это требует выравнивания структуры, если вы не хотите работать с Stream<Stream<T>> или потоком любой коллекции Stream<Collection<T>>.

...