首页 > 解决方案 > 使用 Stream 创建一个随机整数列表并对除最小元素之外的所有元素求和?

问题描述

我想生成 4 个随机数,范围从 1 到 6(含)。然后我想得到这些元素的总和,不包括最小值。

我目前正在创建一个流来填充列表:

List<Integer> values =  r.ints(4,1,7).boxed().collect(Collectors.toList())

然后我删除最小值并使用另一个流来获取值的总和:

values.stream().mapToInt(Integer::intValue).sum();

有人可以建议一种在单个流中执行所有这些操作的方法吗?

标签: javajava-stream

解决方案


对流进行排序,然后跳过第一个(即最小的)元素:

int sumExceptSmallest = IntStream.of(4,1,7).sorted().skip(1).sum(); // 11

或在您的特定情况下:

int sumExceptSmallest = r.ints(4,1,7).sorted().skip(1).sum();

请注意,虽然这对于编码器来说可能是最酷和最有效的,但它并不是最有效的解决方案,因为排序的时间复杂度为 O(n log n)。最有效的运行时间将是一次通过找到最小值并计算总和,然后从另一个中减去一个,在 O(n) 时间内产生解决方案。


推荐阅读