可以将其转换为流单线吗?

时间:2018-12-12 10:11:50

标签: java java-8 java-stream

我想知道是否可以将它更整洁地编写为流函数:

MyObject myObject = new MyObject();

for (Thing thing : listofThings) {
    myObject = myObject.combine(thing);
}

1 个答案:

答案 0 :(得分:9)

是的,将Streamreduce一起使用:

MyObject myObject = listofThings.stream()
                                .reduce(new MyObject(),
                                        MyObject::combine,
                                        MyObject::combiner);

其中combiner是一种MyObject方法,它采用另一个MyObject实例并将其组合到当前对象中。

或者,您可以先将map个实例Thing变成MyObject个实例,然后将这些实例简化为一个MyObject实例:

MyObject myObject = listofThings.stream()
                                .map(new MyObject()::combine)
                                .reduce(MyObject::combiner)
                                .orElseGet(MyObject::new);