加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

将值与Java8流组合

发布时间:2020-12-15 04:46:35 所属栏目:Java 来源:网络整理
导读:如果我有一个带整数的列表,有没有办法构建另一个列表,如果新列表的头部差异低于threashold,整数是否相加?我想用 Java 8流来解决这个问题.它应该类似于RxJava的 Scan operator. Example: 5,2,5,13 Threashold: 2 Result: 5,9,13Intermediate results: 55,25,
如果我有一个带整数的列表,有没有办法构建另一个列表,如果新列表的头部差异低于threashold,整数是否相加?我想用 Java 8流来解决这个问题.它应该类似于RxJava的 Scan operator.

Example: 5,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,13

解决方法

顺序流解决方案可能如下所示:

List<Integer> result = Stream.of(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);

虽然它看起来不是很好的旧解决方案:

List<Integer> input = Arrays.asList(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);

似乎您的问题不是关联的,因此无法轻松并行化.例如,如果将输入分为两组,如(5,2),(2,13),则无法说明是否应合并第二组的前两项,直到处理完第一组.因此,我无法指定正确的组合器功能.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读