Java 8流更简单

时间:2015-10-25 16:32:52

标签: java java-8 java-stream

我有一些对象列表。这些对象中有一些字段和其他内容随着时间的推移而变化。我希望列表中的某些元素具有等于true的值。我拿这个对象,我想在其他地方使用它。

当列表中没有包含该元素的对象时,我得到一个异常,我的应用程序崩溃了。所以我使用一个非常奇怪的代码来避免这种情况,我想知道,如果有更简单,更好的东西。

public class CustomObject{
    private String name;
    private boolean booleanValue;
    //Getters and setters... 
}

//Somewhere else I have the list of objects.
List<CustomObject> customList = new ArrayList<>();
//Now... here I am using this strange piece of code I want to know how to change.
if (customList.stream().filter(CustomObject::getBooleanValue).findAny().isPresent()) {
    customList.stream().filter(CustomObject::getBooleanValue).findAny().get().... //some custom stuff here.
}

正如你所看到的,我在这里做了非常丑陋的代码:调用两次相同的方法。 我试过像

这样的东西
CustomObject customObject = customList.stream().filter..... 

并检查该对象是否为空,但它没有按照我想要的那样做。

1 个答案:

答案 0 :(得分:8)

如果确实如此,您可以使用ifPresent删除isPresentget

customList.stream()
          .filter(CustomObject::getBooleanValue)
          .findAny()
          .ifPresent(customObject -> { /* do something here */ });

如果findAny()找到了值,则会调用指定的使用者,否则不会发生任何事情。