Java 8 stream more simple

I have a list of some objects. Those objects have some fields and other stuff inside that changes over time. I want to get certain elements inside the list that have some value equal to true. I take that object and I want to use it somewhere else.

When the list doesn't contain an object with that element, I get an exception and my application crashes. So I am using a really strange code to avoid this and I want to know, if there is something more simple and better than this.

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.
}

As you can see I am doing really ugly code here: calling twice the same method. I tried something like

CustomObject customObject = customList.stream().filter..... 

and checking if that object is not null but it is not doing what I wanted.

Upvotes: 4

Views: 111

Answers (1)

Tunaki
Tunaki

Reputation: 137084

You can just use ifPresent to get rid of isPresent and get if it is true:

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

If a value was found by findAny(), the specified consumer will be invoked, otherwise, nothing will happen.

Upvotes: 8

Related Questions