如何在Java 8流中使用一对多映射?

时间:2018-09-13 09:32:15

标签: java java-8 java-stream

map的{​​{1}}函数中,我们可以将一个对象转换为另一个对象,因此我们可以将包含3个类型A元素的一个Stream转换为另一个Stream中的3个对象元素类型B。

如何根据条件将Stream A类型的3个元素转换为Stream B类型的6个或更多元素?

在代码方面。

我们可以做到

Stream

但是我们如何喜欢关注?

Stream<B> converted = original.map( a -> new B(a) );

我找不到并了解如何做到这一点。谢谢你。

1 个答案:

答案 0 :(得分:9)

使用flatMap可以将原始Stream的每个元素映射到某种类型的Stream元素。

Steam<B> converted = original.flatMap( a -> { 
    if(a.split()){
        return Stream.of(new B(a), new B(a));
    } else {
        return Stream.of(new B(a));
    }
});

Steam<B> converted = original.flatMap(a -> a.split() ? 
                                      Stream.of(new B(a), new B(a)) : 
                                      Stream.of(new B(a)));