To filter a List in java before Java 8 requires iterating through a complete list and needs us to write many lines of code. After Java 8 filtering a List became so easy. Today I will show how to filter a List before Java 8 and how to filter a list with a stream in Java 8.
1. List Filter before Java 8
package com.kodehelp.java8;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ListFilterBeforeJava8 {
public static void main(final String[] args) {
final List languages = Arrays.asList("Java", "Kotlin", "Python", "Scala", "Swift");
final List filteredLanguages = new ArrayList<>();
// filter out the languages starting with S letter
for (final String language : languages) {
if (language != null && !language.startsWith("S")) {
filteredLanguages.add(language);
}
}
for (final String lang : filteredLanguages) {
System.out.println(lang); //output: Java, Kotlin, Python
}
}
}
2. List Filter with Stream in Java 8
The equivalent example in Java 8, stream.filter()
to filter a List
, and collect()
to convert a stream into a List
.
package com.kodehelp.java8;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class ListFilterInJava {
public static void main(String[] args) {
final List languages = Arrays.asList("Java", "Kotlin", "Python", "Scala", "Swift");
// filter out the languages starting with S letter
final List filteredLanguages = languages.stream() // convert list to stream
.filter(lang -> lang!=null && !lang.startsWith("S")) // filter out language starting with S
.collect(Collectors.toList()); // collect the output and convert streams to a List
for (final String lang : filteredLanguages) {
System.out.println(lang); //output: Java, Kotlin, Python
}
}
}