将值与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),则无法说明是否应合并第二组的前两项,直到处理完第一组.因此,我无法指定正确的组合器功能. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |