Самое элегантное решение в этом случае - создать свой собственный Predicate<User>
, подобный следующему
public class UserPredicate implements Predicate<User> {
boolean active; String eyeColor; double balance; int age; int zipCode;
public UserPredicate(boolean active, String eyeColor, double balance, int age, int zipCode) {
// assign to variables
}
@Override
public boolean test(User user) {
return isActive(user) && hasExpectedBalance(user) && hasExpectedAge(user) && hasExpectedZipCode(user);
}
// implement the methods user in test
private isActive(User user) {
return user != null && user.getActive() == this.active;
}
// etc...
}
Затем в своем коде используйте его следующим образом:
return userRepo
.findAll()
.stream()
.filter(new UserPredicate(active, eyeColor, balance.doubleValue(), age.intValue(), zipCode.intValue())
.collect(Collectors.toList());