I have a List<User>
and I want add a method that return a particular User found using Id. I want make that using lambda expression so I have tried this but it doesn't work.
...
List<User> user = users.stream().filter(x -> x.id == id).collect(Collectors.toList());
return user[0];
This code dosen't compile and give me these errors:
The method stream() is undefined for the type List<User>
Lambda expressions are allowed only at source level 1.8 or above *
Collectors cannot be resolved
Core Java bootcamp program with Hands on practice Yes, any lambda expression is an object in Java. It is an instance of a functional interface. We have assigned a lambda expression to any variable and pass it like any other object.
The lambda expressions have a very simple, precise syntax and provide flexibility to specify the datatypes for the function parameters.
If you are using a lambda expression as an anonymous function but not doing anything with the argument passed, you can replace lambda expression with method reference. In the first two cases, the method reference is equivalent to lambda expression that supplies the parameters of the method e.g. System.
A return statement is not an expression in a lambda expression. We must enclose statements in braces ({}). However, we do not have to enclose a void method invocation in braces.
Advice: If you want just first element matchig a condition, don't collect all elements to list (it's a bit overkill), use findFirst()
method instead:
return users.stream().filter(x -> x.id == id).findFirst().get();
Note that findFirst()
will return an Optional object, and get()
will throw an exception if there is no such element.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With