我有一个对象

Class DummyObject() {
    double first;
    double second;
    double third;
    double fourth;
}

Class SomeObject() {
    List<DummyObject> objectList;
}

Class HighestObject() {
    List<SomeObject> objectList;
}


给出了SomeObject类型的变量。我必须找出DummyObject中四个字段的总和是否不等于数量X。

使用for循环,可以很容易地写成:

for(SomeObject someObject : hightestObject.getObjectList()) {
    for(DummyObject dummyObject : someObject.getObjectList()){
        if((dummyObject.first + dummyObject.second + dummyObject.third + dummyObject.fourth) != X) {
             return false;
        }
    }
}


我们如何使用java流来做到这一点?

最佳答案

您可以组合flatMapanyMatch

HighestObject h = ...;

boolean foundNotX = h.getObjectList().stream() //Stream<SomeObject>
                  .flatMap(so -> so.getObjectList().stream()) //Stream<DummyObject>
                  .mapToDouble(o -> o.first + o.second + o.third + o.fourth) //DoubleStream
                  .anyMatch(sum -> sum != X);
if (foundNotX) return false;


根据您要执行的操作,使用.allMatch(sum -> sum == X)可能更合适。

关于java - 使用流的对象字段列表的总和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45240631/

10-12 04:03