2017-09-07 4 views
1

私が持っている従業員オブジェクトデバッグのJava 8つのフィルタ

public class Employee { 

    public Employee(Integer id, Integer age, String gender, String fName, String lName) { 
     this.id = id; 
     this.age = age; 
     this.gender = gender; 
     this.firstName = fName; 
     this.lastName = lName; 
    } 

    private Integer id; 
    private Integer age; 
    private String gender; 
    private String firstName; 
    private String lastName; 

私は2つの述語

を持っている私は、例えば従業員に複数のフィルタを適用しています
public static Predicate<Employee> firstNameLike(final String name) { 
     return p -> p.getFirstName().contains(name); 
    } 


    public static Predicate<Employee> isAdultFemale() { 
     return p -> p.getAge() > 18 && p.getGender().equalsIgnoreCase("F"); 
    } 

public static void main(String[] args) { 

     Employee e2 = new Employee(2, 13, "F", "Martina", "Hengis"); 
     Employee e5 = new Employee(5, 19, "F", "Cristine", "Maria"); 
     Employee e7 = new Employee(7, 68, "F", "Melissa", "Roy"); 
     Employee e9 = new Employee(9, 15, "F", "Neetu", "Singh"); 


     Employee e1 = new Employee(1, 23, "M", "Rick", "Beethovan"); 
     Employee e3 = new Employee(3, 43, "M", "Ricky", "Martin"); 
     Employee e4 = new Employee(4, 26, "M", "Jon", "Lowman"); 
     Employee e6 = new Employee(6, 15, "M", "David", "Feezor"); 
     Employee e8 = new Employee(8, 79, "M", "Alex", "Gussin"); 
     Employee e10 = new Employee(10, 45, "M", "Naveen", "Jain"); 


     List<Employee> employees = new ArrayList<Employee>(); 
     employees.addAll(Arrays.asList(new Employee[]{e1, e2, e3, e4, e5, e6, e7, e8, e9, e10})); 


     List<Predicate<Employee>> predicates = new ArrayList<>(); 

     predicates.add(EmployeePredicates.isAdultFemale()); 
     predicates.add(EmployeePredicates.firstNameLike("J")); 


     final Predicate<Employee> employeePredicate = predicates.stream().reduce(Predicate::or).get(); 


     final List<Employee> collect = employees.stream().filter(employeePredicate).collect(Collectors.toList()); 

は、このすべては、絶対にうまく動作しますが、何私が行うことができるようにしたいが、フィルタが適用され、ことを印刷した各従業員のためです。言わせて

employee1は女性ではないなどの理由で除外されました。

+0

可能な複製を(https://stackoverflow.com/questions/43555977/logging -the-of-result-of-filter-while-java-streams-filter-by-predicate) –

答えて

0

あなたが述語にデバッグプリントを追加することができます:[述語によってJavaのストリームフィルタを使用しながら、フィルタの結果をログに記録]の

public static Predicate<Employee> firstNameLike(final String name) { 
    return p -> { 
     boolean passed = p.getFirstName().contains(name); 
     if (!passed) { 
      System.out.println(p.getFirstName() + " doesn't contain " + name); 
     } 
     return passed; 
    } 
} 


public static Predicate<Employee> isAdultFemale() { 
    return p -> { 
     booolean passed = p.getAge() > 18 && p.getGender().equalsIgnoreCase("F"); 
     if (!passed) { 
      System.out.println("employee not an adult female"); 
     } 
     return passed; 
    } 
} 
+0

印刷するのではなく、適用された述語をリストしたいと思います。結果を追加するためにStringBuilderを使用できますか – Makky

関連する問題