Java Stream: изменение значения свойства без вызова функции - PullRequest
0 голосов
/ 10 февраля 2019

Я хотел бы знать, возможно ли изменить значение свойства без вызова функции, например:

return findAll().stream()       
                .map(cps -> cps.setFavorited(true))
                .distinct()
                .collect(toList());

1 Ответ

0 голосов
/ 10 февраля 2019

Если бы я вас правильно понял, ваше потоковое решение было бы примерно таким:

return findAll().stream()       
                .map(cps -> {cps.setFavorited(true); return cps;})
                .distinct()
                .collect(toList());

Или ваш setFavorited мог бы вернуть this, таким образом, разрешить цепочку:

 public <Whatever> setFavorited(boolean flag){
     this.favorited = flag;
     return this;
 }

Но вы должны быть очень осторожны с такими вещами, поскольку все, что вас волнует, это distinct (что зависит от по крайней мере equals).Реализация потока может обнаружить, что ваш equals может быть основан на некоторых других свойствах, кроме favorited, таким образом, он может, по крайней мере, теоретически полностью пропустить map.Это, вероятно, надумано, но в java-9 это, например, оптимизация:

Stream.of(1,2,3)
      .map(x -> x + 1)
      .count();

Поскольку все, что вас волнует, это count, map пропущено.

...