仅使用JDK8 + Lambdas加入相同对象类型的列表

Sar*_*abo 3 java collections lambda java-8 java-stream

有没有办法List<Computer> list1, list2;只使用JDK8 + Lambdas 加入两个相同类型的列表(比方说)?你能提供一个例子吗?

ass*_*ias 8

您可以将它们平面映射以获得组合流或列表:

Stream<Computer> joined = Stream.of(list1, list2)
                                .flatMap(List::stream);
List<Computer> list = joined.collect(toList());
Run Code Online (Sandbox Code Playgroud)


Stu*_*rks 8

或者,

Stream<Computer> joined = Stream.concat(list1.stream(), list2.stream());
Run Code Online (Sandbox Code Playgroud)

不确定相对于assylias的答案是否有任何优势或劣势.这可能更容易理解.但是,这并没有使用任何lambdas.我怀疑OP也可能意味着"或流API".

  • 由于`Stream.concat`获得了现有的`Stream`实例,如果它们匹配,它具有保留特征(`SIZED | SUBSIZED`,`NONNULL`或不是'ORDERED`)的理论可能性.然而,与"flatMap"不同,它是非惰性的,因此通常不太可能在大量子流,短路操作和/或存储器敏感操作中表现良好.Afaik,当前的实现没有检测到嵌套的`concat`操作,并且会在多个嵌套的`concat`enated流的(不平衡的)树结构中产生. (3认同)