我想知道什么是最干净的,也许是熟能生巧的,就像下面这个琐碎的例子。
如果我有一个数组(或列表等) [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]中,object1和object2有一些属性组合,因此有必要创建一个新的object5来替换它们,结果将是[object5, object3, object4]。
我的实际用例稍微复杂一些,但在某种程度上,迭代列表的想法是相似的,但不是简化为单个原子值。
发布于 2020-07-24 12:40:08
简化是Stream不是这样工作的。减缩的要点(也称为折叠)是将输入元素组合到一个结果中。
对于Stream来说,这显然不是一个合适的任务,只要计算依赖于基于等价性的连续元素。
你想去做这样的事*.我不知道要把它“转换”成Stream。
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不太匹配。
https://stackoverflow.com/questions/63073324
复制相似问题