首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >减少Java 8中的集合

减少Java 8中的集合
EN

Stack Overflow用户
提问于 2020-07-24 12:12:37
回答 1查看 205关注 0票数 0

我想知道什么是最干净的,也许是熟能生巧的,就像下面这个琐碎的例子。

如果我有一个数组(或列表等) [1,1,1,2,3,5,5,9],我想要进行排序的缩减,折叠,其中添加了连续的数字,只留下一个元素。

这样[1,1,1,2,3,5,5,9]就会变成[3,2,3,10,9]

一种略为笼统的情况:

[object1, object2, object3, object4]中,object1object2有一些属性组合,因此有必要创建一个新的object5来替换它们,结果将是[object5, object3, object4]

我的实际用例稍微复杂一些,但在某种程度上,迭代列表的想法是相似的,但不是简化为单个原子值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-24 12:40:08

简化是Stream不是这样工作的。减缩的要点(也称为折叠)是将输入元素组合到一个结果中。

对于Stream来说,这显然不是一个合适的任务,只要计算依赖于基于等价性的连续元素。

你想去做这样的事*.我不知道要把它“转换”成Stream。

代码语言:javascript
复制
List<Integer> list = Arrays.asList(1,1,1,2,3,5,5,9);
List<Integer> newList = new ArrayList<>();

int i = 0;
while (i < list.size()) {
    int current = list.get(i);
    int next = current;
    int sum = 0;
    int j = i;
    while (current == next) {
        j++;
        sum += next;
        if (j < list.size()) {
            next = list.get(j);
        } else break;
    }
    newList.add(sum);
    i = j;
}

// [3, 2, 3, 10, 9]
System.out.println(newList);                  

*在性能和可读性方面,这显然不是最好的解决方案,只要我真的很擅长"LeetCode“问题的解决。这样做的目的是证明这些解决方案与Stream不太匹配。

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

https://stackoverflow.com/questions/63073324

复制
相关文章

相似问题

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