Java 8 Streams Java Java API
Class:
java.util.stream.Collectors
Method:
public static <T,A,R> Collector<T,?,R> filtering(Predicate<? super T> predicate,
Collector<? super T,A,R> downstream)
Adapts a Collector to one accepting elements of the same type T by applying the predicate to each input element and only accumulating if the predicate returns true .
This method was added in Java 9.
Examples
package com.logicbig.example.collectors;
import java.util.List; import java.util.stream.Collectors; import java.util.stream.IntStream;
public class FilteringExample {
public static void main(String... args) { List<Integer> list = IntStream.of(2, 4, 6, 8, 10, 12) .boxed() .collect(Collectors.filtering(i -> i % 4 == 0, Collectors.toList())); System.out.println(list);
} }
Output[4, 8, 12]
Original Post
This example is taken from Collectors#filtering API doc: package com.logicbig.example.collectors;
import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.stream.Collectors;
public class FilteringExample2 {
public static void main(String... args) {
Map<Department, Set<Employee>> wellPaidEmployeesByDepartment = getEmployees().stream().collect( Collectors.groupingBy((Employee employee) -> employee.dept, Collectors .filtering(e -> e.salary >= 2000, Collectors.toSet()))); wellPaidEmployeesByDepartment.forEach((k, v) -> System.out.printf("%8s: %s%n", k.name, v)); }
private static List<Employee> getEmployees() { return List.of( new Employee("Sara", new Department("Admin"), 3000), new Employee("Joe", new Department("IT"), 1000), new Employee("Mike", new Department("Account"), 2000), new Employee("Tony", new Department("Account"), 1500), new Employee("Linda", new Department("IT"), 5000) ); }
private static class Employee { private String name; private Department dept; private int salary;
public Employee(String name, Department dept, int salary) { this.name = name; this.dept = dept; this.salary = salary; }
@Override public String toString() { return "Employee{" + "name='" + name + '\'' + ", dept=" + dept + ", salary=" + salary + '}'; } }
private static class Department { private String name;
public Department(String name) { this.name = name; }
@Override public String toString() { return "Department{" + "name='" + name + '\'' + '}'; }
@Override public boolean equals(Object o) { Department that = (Department) o; return Objects.equals(name, that.name); }
@Override public int hashCode() { return Objects.hash(name); } } }
Output Account: [Employee{name='Mike', dept=Department{name='Account'}, salary=2000}] IT: [Employee{name='Linda', dept=Department{name='IT'}, salary=5000}] Admin: [Employee{name='Sara', dept=Department{name='Admin'}, salary=3000}]
Original Post
|
|