有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用流的对象字段列表的总和

我有个目标

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流呢


共 (2) 个答案

  1. # 1 楼答案

    试试这个

    return hightestObject.getObjectList().stream()
        .flatMap(someObject -> someObject.getObjectList().stream())
        .allMatch(dummyObject ->
            dummyObject.first + dummyObject.second + dummyObject.third + dummyObject.fourth == X);
    
  2. # 2 楼答案

    你可以把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)可能更合适