如何使用java流对整数列表求和?
2022-08-31 04:29:48
我想对整数列表求和。它的工作原理如下,但语法感觉不对。代码可以优化吗?
Map<String, Integer> integers;
integers.values().stream().mapToInt(i -> i).sum();
我想对整数列表求和。它的工作原理如下,但语法感觉不对。代码可以优化吗?
Map<String, Integer> integers;
integers.values().stream().mapToInt(i -> i).sum();
这将起作用,但是正在做一些自动开箱,这就是为什么它“感觉”奇怪。 将流转换为“原始整数值元素”。以下任一方法都可以工作,并更好地解释编译器在后台使用原始语法执行的操作:i -> i
mapToInt
IntStream
integers.values().stream().mapToInt(i -> i.intValue()).sum();
integers.values().stream().mapToInt(Integer::intValue).sum();
我建议另外2个选项:
integers.values().stream().mapToInt(Integer::intValue).sum();
integers.values().stream().collect(Collectors.summingInt(Integer::intValue));
第二个使用 Collectors.summingInt()
收集器,还有一个收集器,您可以将其与 .summingLong()
mapToLong
第三种选择:Java 8引入了一个非常有效的LongAdder
累加器,旨在加快并行流和多线程环境中的汇总速度。下面是一个示例用法:
LongAdder a = new LongAdder();
map.values().parallelStream().forEach(a::add);
sum = a.intValue();