Я хочу підсумувати список цілих чисел. Це працює так, але синтаксис не відчуває себе правильно. Чи можна оптимізувати код?
Map<String, Integer> integers;
integers.values().stream().mapToInt(i -> i).sum();
i -> i
дуже зрозумілим, особисто. Ну, так, вам потрібно знати, що значення буде автоматично нерозфасовано, але це правда з Java 5 ...
foo(int i)
, не пишуть foo(myInteger.intValue());
кожен раз, коли вони його викликають (або, принаймні, я не очікую !!). Я згоден з вами, що Integer::intValue
є більш чітким, але я думаю, що це стосується і цього. Люди повинні просто засвоїти це один раз, і тоді ви закінчите :-). Це не так, якби це було якесь чарівне затуманення.
i -> i
схоже на неоперацію, а в принципі - це не-оп. Впевнений, що під капотом Integer.intValue()
викликається, але ще глибше під кришкою, що методи отримують вказівку, щоб стати точно тим самим, що він схожий у вихідному коді. Integer::intValue
має бонусну точку не створювати синтетичний метод у байт-коді, але це не те, що повинно впливати на ваше рішення про організацію вихідного коду.
mapToLong
щоб уникнути переливів, залежно від значень, які може мати ваша карта.