We can split a collection into multiple subcollections using a Predicate, Lambda, Streams and the Collectors.partitioningBy() method.
Example:
package org.code2care.examples;
import java.util.*;
import java.util.function.Predicate;
import java.util.stream.Collectors;
public class SplitCollectionByPredicateExample {
public static void main(String... args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
Predicate<Integer> isEven = num -> num % 2 == 0;
Map<Boolean, List<Integer>> evenOddMap = numbers.stream()
.collect(Collectors.partitioningBy(isEven));
List<Integer> evenNumbers = evenOddMap.get(true);
List<Integer> oddNumbers = evenOddMap.get(false);
System.out.println("Even Numbers: " + evenNumbers);
System.out.println("Odd Numbers: " + oddNumbers);
}
}
Output:
If you are working with Set then your code will be as follows.
Set<Integer> numbers = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
Predicate<Integer> isEven = num -> num % 2 == 0;
Set<Integer> evenNumbers = numbers.stream()
.filter(isEven)
.collect(Collectors.toSet());
References:
Comments & Discussion
Facing issues? Have questions? Post them here! We're happy to help!