

Table of Contents
Overview
Java List and Map may contain null values (elements) and sometimes we need to filter those null elements to avoid NullPointerException before going to process it using stream API.
We can do it by filtering null elements from stream using Stream.filter(). Let’s go through the examples of Java stream filter null values from the steam of List, Map values and Set of Map.Entry
Example 1: Filter null values from List
In this example, We are going to filter all null elements from a stream of List using Objects class’ static nonNull method introduces in Java 8.
Objects.nonNull() method returns true if the provided reference is non-null otherwise it returns false, and based on that Stream.filter() method will decide whether an element should filter or continue.
Alternate solution is pass predicate function or lambda expression which return boolean value whether current element is null or not like: filter(element -> element != null)
package com.javadeveloperzone; import java.util.*; public class FilterNullElement { public static void main(String[] args) { String[] strArray = new String[] {"ONE", null, "THREE", null, "FIVE"}; //Two elements second and fourth are null List<String> elements = new ArrayList<>(Arrays.asList(strArray)); System.out.println("# Before Filter"); elements.forEach(System.out::println); System.out.println("# After Filter"); elements.stream() .filter(Objects::nonNull) // It will filter null elements //another way is filter(element -> element != null) .forEach(System.out::println); } }
Output
# Before Filter ONE null THREE null FIVE # After Filter ONE THREE FIVE // Here both null elements are filtered
Example 2: Filter null values from Map values
In this example, We are going to filter all null value elements from the stream of Map values using Objects class’ static nonNull method.
package com.javadeveloperzone; import java.util.*; public class FilterNullElement { public static void main(String[] args) { Map<Integer, String> elementMap = new HashMap<>(); elementMap.put(1, "ONE"); elementMap.put(2, null); elementMap.put(3, "THREE"); elementMap.put(4, null); elementMap.put(5, "FIVE"); System.out.println("# Before Filter null values"); elementMap.values() .forEach(System.out::println); System.out.println("# After Filter null values"); elementMap.values() .stream() .filter(Objects::nonNull) .forEach(System.out::println); } }
Output
# Before Filter null values ONE null THREE null FIVE # After Filter null values ONE THREE FIVE // Here both null values (Key: 2 and 4) are filtered
Example 3: Filter null values from Set of Map.Entry
In the following example, passed a lambda expression as an argument of filter function (which returns the boolean value true if both key and value of current map entry are not null else return false) to filter elements which contain either key or value as null.
package com.javadeveloperzone; import java.util.*; public class FilterNullElement { public static void main(String[] args) { Map<Integer, String> elementMap = new HashMap<>(); elementMap.put(1, "ONE"); elementMap.put(2, null); elementMap.put(null, "THREE"); elementMap.put(4, null); elementMap.put(5, "FIVE"); System.out.println("# Before Filter null keys and values"); elementMap.entrySet() .forEach(entry -> { System.out.println(entry.getKey() + " => " + entry.getValue()); }); System.out.println("# After Filter null keys and values"); elementMap.entrySet() .stream() .filter(entry -> entry.getKey() != null && entry.getValue() != null) //Filtered elements from map which has either Key or Value null .forEach(entry -> { System.out.println(entry.getKey() + " => " + entry.getValue()); }); } }
Output
# Before Filter null keys and values 1 => ONE 2 => null null => THREE 4 => null 5 => FIVE # After Filter null keys and values 1 => ONE 5 => FIVE //Here, entry of value "THREE" is filtered due to its Key is null and entry of key "2" and "4" are filtered because of its value is null
Conclusion
Java stream filter null values article shows you how to filter null elements from the stream of List, Map values, and Map entry set.
The same way we can filter null elements (values) from other Collection implementations using Stream.filter() method and pass the predicate function or lambda expression to filter null elements as per your requirements (for primitive-wrapper or custom java type).