Java 8 Optional filter() Method Example


A quick example guide to Java 8 Optional filter() Method. filter(Predicate predicate) method used to return a Optional object for the given predicate(the condition).

1. Overview

In this tutorial, We'll discuss how to use Predicate with Optional class. The Java 8 Optional class has a method filter() which takes Predicate as an argument.

Optional is a class and it is in java.util package. Optional is declared as final in its source code. Because no other classes can be inherited and to stop overriding the behavior.

Java 8 Optional filter

API Note: If a value is present, and the value matches the given predicate, returns an Optional describing the value, otherwise returns an empty Optional.

First, let us take a look at syntax, it's explanation, and example programs.

Java 8 Optional filter()

2. filter(Predicate predicate) Syntax

Below is the syntax for filter() method.

public Optional<T> filter(Predicate<? super T> predicate)

filter() method accepts Predicate as an argument and returns Optional value.


Predicate Example:

Predicate takes one argument and returns boolean. Checks for a condition and returns true if condition satisfies else false.

Predicate<Employee> empSal = e -> e.getSal() > 10000;

This checks for the condition employee salary > 10000.

3. Java 8 filter() Example for String

Below is the example program on filter() method.

In the example, first created an Optional instance by calling of() method with the string "Hello Mate, Welcome to java8example blog".
Next, created a predicate welcomePredicate to validate if the string contains the "Welcome" word in it. After this, using filter(welcomePredicate) method and passed welcomePredicate as an argument. When the filter() method is executed, welcomePredicate is evaluated. If welcomePredicate is true then it returns the current string.

In the next example, Created another Predicate haiPredicate to validate if the string contains "Hai". Again called the Optional filter(haiPredicate) and evaluated haiPredicate. But no "Hai" text found. Hence, the condition in haiPredicate is failed. So it returned empty optional instance. because of this, the output is printed as "Optional.empty".

package com.java.w3schools.blog.java8.optional;

import java.util.Optional;
import java.util.function.Predicate;

 * java 8 Optional filter() method example
 * @author Venkatesh
public class OptionalFilterExample {
 public static void main(String[] args) {
  Optional<String> helloOptonal = Optional.of("Hello Mate, Welcome to java8example blog");
  // Predicate match case
  Predicate<String> welcomePredicate = s -> s.contains("Welcome");
  Optional<String> welcomeOptional = helloOptonal.filter(welcomePredicate);
  System.out.println("welcomeOptional : " + welcomeOptional);
  // Predicate non-match case
  Predicate<String> haiPredicate = s -> s.contains("Hai");
  Optional<String> haiOptional = helloOptonal.filter(haiPredicate);
  System.out.println("haiOptional : " + haiOptional);


welcomeOptional : Optional[Hello Mate, Welcome to java8example blog]
haiOptional : Optional.empty

4. filter() Example but Passing List to Optional 

In the above example, First created an Optional instance with String. In this example, Now we will create an Optional with List. We'll see how filter method behaves.

List<String> countries = Arrays.asList("USA", "UK", "AUS");
Optional<List<String>> countriesOptional = Optional.of(countries);

Predicate<List<String>> listPredicate = list -> list.stream().filter(name -> name.startsWith("U")).count() > 0;

Optional listOpional = countriesOptional.filter(listPredicate);
System.out.println("List Optional filter() : "+listOpional);


List Optional filter() : Optional[[USA, UK, AUS]]

5. Internal Implementation

Below is the internal implementation code from java 12 API.

public Optional<T> filter(Predicate<? super T> predicate) {
    if (!isPresent()) {
        return this;
    } else {
        return predicate.test(value) ? this : empty();

Internally, it calls predicate.test(value) method where test() is a functional method.

6. Conclusion

In this article, We've discussed Optional.filter() method with examples. filter() method takes Predicate as an argument and returns the Optional object if the Predicate condition is true.

This works the same for String, List, Map, or any object that Optional object is formed.

And also seen on how it works internally and what method is invoked to validate the predicate.

If we pass the predicate is null, it throws NullPointerException.

Full example code on GitHub



About Us

Author: Venkatesh - I love to learn and share the technical stuff.

accumulo,1,ActiveMQ,2,Adsense,1,API,31,ArrayList,16,Arrays,2,Bean Creation,3,Bean Scopes,1,BiConsumer,1,Blogger Tips,1,Books,1,C Programming,1,Collection,4,Collections,20,Collector,1,Command Line,1,Compile Errors,1,Configurations,7,Constants,1,Control Statements,8,Conversions,5,Core Java,72,Corona India,1,Create,2,CSS,1,Date,2,Date Time API,3,Dictionary,1,Difference,1,Download,1,Eclipse,2,Efficiently,1,Error,1,Errors,1,Exception,1,Exceptions,2,Fast,1,Files,9,Float,1,Font,1,For examples,1,For loop examples,1,For Loop in Java,1,Form,1,Freshers,1,Function,3,Functional Interface,2,Garbage Collector,1,Generics,4,Git,4,Grant,1,Grep,1,HashMap,1,HTML,2,HttpClient,2,Immutable,1,Inner for loops,1,Installation,1,Interview Questions,5,Iterate,2,Jackson API,3,Java,28,Java 10,1,Java 11,5,Java 12,5,Java 13,2,Java 14,2,java 5 For loop,1,Java 8,48,Java 9,1,Java Design Patterns,1,Java Files,1,Java for loop,1,Java Program,2,Java Programs,65,java.lang,5,java.util. function,1,jQuery,1,Kotlin,10,Kotlin Programs,6,Lambda,1,lang,29,Leap Year,1,live updates,1,Math,1,Maven,1,Method References,1,Mockito,1,MongoDB,3,Nested for loop,1,Nested for loop examples,1,New Features,1,Operations,1,Optional,4,Oracle,5,Oracle 18C,1,Partition,1,Patterns,1,Programs,1,Property,1,Python,2,Quarkus,1,Read,1,Real Time,1,Recursion,2,Remove,2,Rest API,1,Schedules,1,Serialization,1,Servlet,1,Softwares,1,Sorting Techniques,8,Spring,2,Spring Boot,23,Spring Email,1,Spring MVC,1,Stream,3,Streams,11,String,48,String Programs,8,String Revese,1,Swing,1,System,1,Tags,1,Threads,8,Tomcat,1,Tomcat 8,1,Troubleshoot,16,Unix,2,Updates,3,util,5,While Loop,1,
JavaProgramTo.com: Java 8 Optional filter() Method Example
Java 8 Optional filter() Method Example
A quick example guide to Java 8 Optional filter() Method. filter(Predicate predicate) method used to return a Optional object for the given predicate(the condition).
Loaded All Posts Not found any posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU LABEL ARCHIVE SEARCH ALL POSTS Not found any post match with your request Back Home Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow THIS PREMIUM CONTENT IS LOCKED STEP 1: Share to a social network STEP 2: Click the link on your social network Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy Table of Content