簡體   English   中英

使用流的對象字段列表的總和

[英]Sum of list of object fields using stream

我有一個對象

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)可能更合適。

嘗試這個。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM