art*_*nig 3 java java-8 rx-java java-stream
如果我有一个带整数的列表,有没有办法构建另一个列表,如果新列表的头部差异低于threashold,则整数总和?我想用Java 8流来解决这个问题.它应该类似于RxJava 的Scan运算符.
Example: 5, 2, 2, 5, 13
Threashold: 2
Result: 5, 9, 13
Intermediate results:
5
5, 2
5, 4 (2 and 2 summed)
5, 9 (4 and 5 summed)
5, 9, 13
Run Code Online (Sandbox Code Playgroud)
顺序流解决方案可能如下所示:
List<Integer> result = Stream.of(5, 2, 2, 5, 13).collect(ArrayList::new, (list, n) -> {
if(!list.isEmpty() && Math.abs(list.get(list.size()-1)-n) < 2)
list.set(list.size()-1, list.get(list.size()-1)+n);
else
list.add(n);
}, (l1, l2) -> {throw new UnsupportedOperationException();});
System.out.println(result);
Run Code Online (Sandbox Code Playgroud)
虽然它看起来不是很好的旧解决方案:
List<Integer> input = Arrays.asList(5, 2, 2, 5, 13);
List<Integer> list = new ArrayList<>();
for(Integer n : input) {
if(!list.isEmpty() && Math.abs(list.get(list.size()-1)-n) < 2)
list.set(list.size()-1, list.get(list.size()-1)+n);
else
list.add(n);
}
System.out.println(list);
Run Code Online (Sandbox Code Playgroud)
似乎您的问题不是关联的,因此无法轻松并行化.例如,如果将输入拆分为这样的两个组(5, 2), (2, 5, 13),则无法说明是否应合并第二个组的前两个项,直到处理完第一个组.因此,我无法指定正确的组合器功能.
| 归档时间: |
|
| 查看次数: |
1601 次 |
| 最近记录: |