Stream API reduce

Здравейте,

reduce методът в Stream interface е overloade-нат и има три версии:

T reduce(T identity, BinaryOperator<T> accumulator); → този разглеждахме по време на лецията

!!ВАЖНО - преди да продължа бих искал да направя уточнение, че е достатъчно да използвате него и да не отделяте внимание на долния. Неговата употреба е специфична и може да се замени с map + reduce с два параметъра.

int computedAges = users.stream()
                        .map(person -> person.getAge())
                        .reduce((integer, integer2) -> integer + integer);

Това е този от примера на @ppetrov12, който е по-генерална версия от този по време на лекция:

List<Person> users = Arrays.asList(
                new Person(30,  "John"), 
                new Person(35, "Julie"));

int computedAges = users.stream().reduce(
                0, 
                (result, user) -> result + user.getAge(), 
                (integer, integer2) -> integer + integer2);

Сигнатурата на метода от Stream класът е:

<U> U reduce(U identity,
                 BiFunction<U, ? super T, U> accumulator,
                 BinaryOperator<U> combiner);
  • identifier - 0 - the type of Object we would like to receive as a result (in this example is an int)

  • Accumulator - (result, user) -> result+ user.getAge()

    • Implementaion of BiFunction<U,T,U> is required
    • The BiFunction takes one parameter of type U(Integer in our case) and another of type T(Person) and returns an Object of type U(Integer)
  • Combiner - (integer, integer2) -> integer + integer2)

    • Implementation of BinaryOperator is required
    • The BinaryOperator receives the results from the accumulator and uses the defined behavior (in this case sums them)
  • Повече информация специфично за метода тук .

  • Повече информация за reduce може да намерите тук .

1 Like