Tag: reduce

流减少不兼容的类型

我正在尝试创建一个包含多个谓词并减少它们的查找程序: public static Collection findOr( Context pContext, Class pClass, Predicate… pPredicates) { Predicate lReducedPredicate = Arrays.asList(pPredicates).stream().reduce(Predicate::or).orElse(r -> false); return find(pContext, pClass, lReducedPredicate); } 不幸的是我得到以下编译错误: Predicate lReducedPredicate = Arrays.asList(pPredicates).stream()。reduce(Predicate :: or).orElse(r – > false); 不兼容的类型:谓词不能转换为谓词,其中T是一个类型变量:T扩展在方法findOr(Context,Class,Predicate …)中声明的BusinessInterface,其中CAP#1,CAP#2是新的类型变量:CAP# 1扩展Object super:T从捕获? 超级T CAP#2扩展了Object super:T从捕获? 超级T 我在Eclipse中没有错误,我不知道出了什么问题。 任何帮助真的很感激:)。

Java流减少

我有以下示例数据集,我想根据方向的值使用Java流api进行转换/缩减 Direction int[] IN 1, 2 OUT 3, 4 OUT 5, 6, 7 IN 8 IN 9 IN 10, 11 OUT 12, 13 IN 14 至 Direction int[] IN 1, 2, OUT 3, 4, 5, 6, 7 IN 8, 9, 10, 11 OUT 12, 13 IN 14 到目前为止我写的代码 enum Direction { IN, OUT } class […]

在使用先前元素值对每个元素执行操作之后,使用Java 8 Stream Reduce返回List

我是Streams和Reduce的新手,所以我正在尝试并遇到问题: 我有一个计数器列表,它有一个启动计数器和结束计数器。 项目的startcounter始终是前一个的终结者。 我有一个列表,这些计数器listItems ,我想有效地循环,过滤掉非活动记录,然后将列表减少到一个新的列表,其中设置了所有的StartCounters。 我有以下代码: List active = listItems.stream() .filter(e -> e.getCounterStatus() == CounterStatus.ACTIVE) .reduce(new ArrayList(), (a,b) -> { b.setStartCounter(a.getEndCounter()); return b; }); 但它并没有真正奏效,我有点卡住了,有人能给我一些建议来帮我搞定吗? 或者是否有同样有效的更好的方法来做到这一点? 谢谢!

累积Java流,然后才对其进行处理

我有一个类似于以下内容的文档: data.txt中 100, “some text” 101, “more text” 102, “even more text” 我使用正则表达式处理它并返回一个新的处理文档如下: Stream lines = Files.lines(Paths.get(data.txt); Pattern regex = Pattern.compile(“([\\d{1,3}]),(.*)”); List result = lines.map(regex::matcher) .filter(Matcher::find) .map(m -> new MyClass(m.group(1), m.group(2)) //MyClass(int id, String text) .collect(Collectors.toList()); 这将返回已处理的MyClass列表。 可以并行运行,一切正常。 问题是我现在有这个: data2.txt 101, “some text the text continues in the next line and maybe in the next” […]

Java Stream:按布尔谓词划分为两个列表

我有一份employees名单。 它们具有isActive布尔字段。 我想将employees分为两个列表: activeEmployees和formerEmployees 。 是否可以使用Stream API? 什么是最复杂的方式?

Java 8 Stream – Reduce函数的组合器未执行

我使用一个简单的reduce方法,有三个参数即。 身份,累加器和组合器。 这是我的代码…… Integer ageSumComb = persons .stream() .reduce(0, (sum, p) -> { System.out.println(“Accumulator: Sum= “+ sum + ” Person= ” + p); return sum += p.age; }, (sum1, sum2) -> { System.out.format(“Combiner: Sum1= ” + sum1 + ” Sum2= “+ sum2); return sum1 + sum2; 但正在发生的事情是Combiner没有被执行。 我没有得到这背后的原因。 这是我的输出.. Accumulator: Sum= 0 Person= Max Accumulator: […]

Java 8中的reduce累加器是否允许修改其参数?

在Java 8中,Stream有一个方法减少: T reduce(T identity, BinaryOperator accumulator); 累加器运算符是否允许修改其任一参数? 我认为不是因为JavaDoc说累加器应该是NonInterfering,尽管所有的例子都谈到修改集合,而不是修改集合的元素。 所以,举一个具体的例子,如果有的话 integers.reduce(0, Integer::sum); 并假设Integer是可变的,并允许sum通过向其添加(就地)第二个参数的值来修改其第一个参数? 我认为不是,但我也想要一个这个干扰导致问题的例子。

在Stream reduce方法中,对于sum,标识总是0,对于乘法,1是1吗?

我进行java 8学习。 我发现了有趣的行为: 让我们看看代码示例: // identity value and accumulator and combiner Integer summaryAge = Person.getPersons().stream() //.parallel() //will return surprising result .reduce(1, (intermediateResult, p) -> intermediateResult + p.age, (ir1, ir2) -> ir1 + ir2); System.out.println(summaryAge); 和模型类: public class Person { String name; Integer age; ///… public static Collection getPersons() { List persons = new ArrayList(); persons.add(new […]