我想生成 4 个随机数,范围从 1 到 6(含)。然后我想得到这些元素的总和(不包括最小值)。
我目前正在创建一个流来填充列表:
List<Integer> values = r.ints(4,1,7).boxed().collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)
然后我删除最小值并使用另一个流来获取值的总和:
values.stream().mapToInt(Integer::intValue).sum();
Run Code Online (Sandbox Code Playgroud)
有人可以建议一种在单个流中执行所有这些操作的方法吗?
int sumExceptSmallest = IntStream.of(4,1,7).sorted().skip(1).sum(); // 11
Run Code Online (Sandbox Code Playgroud)
或者根据您的具体情况:
int sumExceptSmallest = r.ints(4,1,7).sorted().skip(1).sum();
Run Code Online (Sandbox Code Playgroud)
请注意,虽然这对于编码器来说可能是最酷和最有效的,但它并不是最有效的解决方案,因为排序的时间复杂度为 O(n log n)。最有效的运行时间是单次查找最小值并计算总和,然后从另一个中减去一个,在 O(n) 时间内产生解决方案。
使用IntSummaryStatistics可以在流中通过单次计算来计算此值:
IntStream stream = /* random stream of integers */;
IntSummaryStatistics stats = stream.summaryStatistics();
int sum = stats.sum();
sum -= stats.min(); //sum, minus the lowest element
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
239 次 |
| 最近记录: |