我想对整数列表求和。它的工作方式如下,但是语法不正确。代码可以优化吗?
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
以避免溢出,具体取决于您的地图可以具有的值。