首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用流计算列表的和?

如何使用流计算列表的和?
EN

Stack Overflow用户
提问于 2018-07-22 09:14:09
回答 5查看 283关注 0票数 1

我有一个像List<Integer>一样的{ 1, 2, 3 ,4, 5 },我想得到像12345一样的结果。

如何使用Java8流或任何智能方法来完成此操作?

List由单数非负整数组成.

我当然可以喜欢1*10000+ 2 * 1000 + 3*100 + 4*10 + 5,但这是相当乏味的。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-07-22 09:16:48

使用IntStream.reduce

代码语言:javascript
复制
int n = IntStream.of(array).reduce(0, (a,b) -> 10*a + b)

这实际上与以下情况相同:

代码语言:javascript
复制
int n = 0;
for (int b : array) {
  n = 10 * n + b;
}

就我个人而言,在没有其他约束的情况下,我会选择后者,因为它的代码要简单得多,不涉及相对重量级的流框架,更易于调试等等。

票数 5
EN

Stack Overflow用户

发布于 2018-07-22 09:25:44

这一种方法是不使用流,而是使用regex的可能的 way

代码语言:javascript
复制
Integer.parseInt(Arrays.toString(nums).replaceAll("\\D+", ""));
票数 1
EN

Stack Overflow用户

发布于 2018-07-22 09:32:57

您还可以使用以下方法获得相同的结果:

代码语言:javascript
复制
List<Integer> ints = Arrays.asList(1, 2, 3, 4, 5);
int size = ints.size();
double res = IntStream.range(1, size + 1)
        .mapToDouble(i -> ints.get(i - 1) * Math.pow(10, size - i))
        .sum();

这只是将每个digit*(10^digit_position_from_right)之和相加,digit_position_from_right从零开始。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51463599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档