Witam,
Używam takiej metody do filtrowania zwracanych książek:
public List<BookDTO> findAllByUserAndParams(User user, Map<String,String> params) {
List<BookDTO> filteredList =
findAllByUser(user)
.stream()
.filter(b -> params.get("author")!=null? b.getAuthor().contains(params.get("author")) : true)
.filter(b -> params.get("title")!=null? b.getTitle().contains(params.get("title")) : true)
.filter(b -> params.get("publisher")!=null? b.getPublisher().contains(params.get("publisher")) : true)
.filter(b -> params.get("type")!=null? b.getType().getName().equals(params.get("type")) : true)
.filter(b -> params.get("status")!=null? b.getStatus().getDescription().equals(params.get("status")) : true)
.collect(Collectors.toList());
return filteredList;
}
Dodam jedynie, że status i typ mają zdefiniowany enum z polem (name/description) typu String. Niby wszystko działa, jest w miarę zwięźle, ale te "pociągi" trochę mnie martwią. Czy jest sposób, żeby to lepiej zapisać (rozpisać lambdy czy coś)? Może w ogóle da się to zrobić jakoś lepiej?