Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Storing some value in variable while using lambda expression

I am working with java-8. Please see the following code snippet -

studentsOfThisDept = students.stream()
                .filter(s -> (student != null
                        && s.getDepartment() != null
                        && s.getDepartment().getCode().equals("CS")
                        ))
                .collect(Collectors.toList());  

Here I have to perform 2 check -

s.getDepartment() != null ; // 1st check

and

s.getDepartment().getCode().equals("CS") // 2nd check

Is there any way that I can store the value of s.getDepartment() to some variable (say dept) so that in second check I can write -

dept.getCode().equals("CS");
like image 988
Razib Avatar asked Dec 02 '22 14:12

Razib


1 Answers

Introduce a variable after filtering null students

studentsOfThisDept = students.stream()
            .filter(s -> s != null)
            .filter(s -> {
                     Dept dept = s.getDepartment();
                     return dept != null && dept.getCode().equals("CS");
                    })
            .collect(Collectors.toList());  

filter() takes a predicate, which means the lambda block can do things like declare variables, log stuff etc. Just make sure to return a boolean at the end of the block. A predicate is a function that takes an object and returns boolean.

like image 167
kjsebastian Avatar answered Feb 16 '23 01:02

kjsebastian