我想对一个整数列表求和。它的工作原理如下,但是语法感觉不太对。代码可以优化吗?

Map<String, Integer> integers;
integers.values().stream().mapToInt(i -> i).sum();

当前回答

IntStream.of(1, 2, 23).sum();
IntStream.of(1, 2, 23,1, 2, 23,1, 2, 23).max().getAsInt();

其他回答

不幸的是,看起来像流API只返回正常的流,从List<Integer># Stream()。我猜他们是被迫这么做的因为泛型的工作方式。

这些正常的流是泛型对象,所以没有专门的方法,如sum()等,所以你必须使用奇怪的重新流“看起来像一个无操作”转换默认情况下获得这些方法... .mapToInt(i -> i)。

另一种选择是使用“Eclipse Collections”,它就像一个扩展的java流API

IntLists.immutable.ofAll (integers.values ()) .sum ();

这将是对int类型数组求和的最短方法(对于长数组LongStream,对于双数组DoubleStream等等)。不过,并不是所有的基元整数或浮点类型都有Stream实现。

IntStream.of(integers).sum();

可以使用reduce()对整数列表求和。

int sum = integers.values().stream().reduce(0, Integer::sum);
IntStream.of(1, 2, 23).sum();
IntStream.of(1, 2, 23,1, 2, 23,1, 2, 23).max().getAsInt();

可以使用collect方法添加整数列表。

List<Integer> list = Arrays.asList(2, 4, 5, 6);
int sum = list.stream().collect(Collectors.summingInt(Integer::intValue));