Может ли это быть преобразовано в потоковый однострочный? - PullRequest
0 голосов
/ 12 декабря 2018

Мне интересно, можно ли написать это более аккуратно в виде функции потока:

MyObject myObject = new MyObject();

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

1 Ответ

0 голосов
/ 12 декабря 2018

Да, используя Stream с reduce:

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);
...