我正在尝试用lambda替换java for循环。
我先上一节课 Arrs:
```
public class Arrs {
private boolean isX;
public boolean isX() {
return isX;
}
public void setX(boolean x) {
isX = x;
}
}
然后我有一门课叫 `Example:` ```
public class Example {
private Arrs[] arrs;
public Arrs[] getArrs() {
return arrs;
}
public void setArrs(Arrs[] arrs) {
this.arrs = arrs;
}
}
那么在我的主要我想计算的总次数的真实价值 isX
变量。使用纯java for循环,代码是:
int count = 0;
for(Example anExample : exampleList) {
for(Arrs anArray : anExample.getArrs()) {
if(anArray.isX()) {
count++;
}
}
}
对于lambda,我尝试了以下方法:
Stream<Object> x = a.map(anArray -> {
return Arrays.stream(anArray).filter(array -> array.isX()).count();
});
但它不会返回正确的元素数。
3条答案
按热度按时间mitkmikd1#
相同的平面图,但使用reduce而不是filter+count:
reduce是一个很好的小函数,它遍历一个流,在“传递”一个值的同时对每个元素做一些事情。
更多关于这个问题
fcy6dtqo2#
好吧,你可以用
flatMap
以及filter
:首先,我们浏览示例列表,并将每个元素平面Map到
getArrs()
. 平面Map确保getArrs()
在单个流中存在。然后我们就按 predicate 过滤
arr.isX()
. 最后,我们打电话来count()
在流上,返回(剩余)元素的数量。nbysray53#
您没有从examplelist中获取对象。下面是您正在尝试实现的一段代码。:)