Альтернатива лямбде - PullRequest
       8

Альтернатива лямбде

0 голосов
/ 26 октября 2019

Есть ли альтернатива лямбда-выражениям? С моим текущим кодом я не могу получить доступ к переменной maxCnt, изменить ее и отправить обратно для использования.

int maxCnt = 0;

incoming.stream().forEach(a -> {
    Integer cnt = wordFrequency.get(a);
    if (cnt != null) {
        if (cnt > maxCnt) {
            maxCnt = cnt;
        }
    }

});

Ответы [ 2 ]

5 голосов
/ 26 октября 2019

Конечно, вы можете сделать:

int maxCnt = incoming.stream()
          .map(wordFrequency::get)
          .filter(Objects::nonNull)
          .mapToInt(Integer::intValue)
          .max().orElse(0);
4 голосов
/ 26 октября 2019

Ничего не требует лямбда. В вашем случае цикл for может сделать то же самое:

int maxCnt = 0;
for (var a : incoming) {
    Integer cnt = wordFrequency.get(a);
    if (cnt != null && cnt > maxCnt) maxCnt = cnt;
}

Это читабельно и хорошо работает;Вы ничего не теряете, если не используете лямбду - сегодня.

В будущем, с улучшением производительности параллельных потоков возможно , будет целесообразно запускать даже небольшие рабочие нагрузки параллельно. Другими словами, больше потоков может по умолчанию быть параллельными, а не последовательными. В таком будущем использование Stream и лямбд вместо этого цикла for позволит вашему коду воспользоваться этими улучшениями без переписывания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...