У меня есть приложение с Hibernate (JPA), которое я использую в сочетании с Jinq. У меня есть таблица, в которой перечислены сущности, и я хочу, чтобы пользователь мог ее фильтровать. В таблице перечислены лица.
@Entity
public class Person {
private String firstName;
private String surName;
@Id
private int id;
public Person() {
}
public Person(final String pFirstName, final String pSurName, final int pID) {
firstName = pFirstName;
surName = pSurName;
id = pID;
}
public int getId() {
return id;
}
public void setId(final int pID) {
id = pID;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(final String pFirstName) {
return firstName = pFirstName;
}
public String getSurName() {
return surName;
}
public void setSurName(final String pSurName) {
surName = pSurName;
}
}
Я использую JavaFX для этого, но это не имеет значения. Первое, что я пробовал, - это отфильтровать людей по их фамилии. Для фильтрации я использовал Jinq в комбинации с лямбдой. Мой код фильтрации выглядит следующим образом:
private List<Person> getFilteredPersons(final String pSurName){
JPAJinqStream<Person> stream = streamProvider.streamAll(Person.class);
stream.where(person -> person.getSurName().contains(pSurName));
List<Person> filteredList = stream.toList();
stream.close();
return filteredList;
}
Итак, объект, над которым я работаю, является обычной строкой. Я не думаю, что мой класс Person имеет к этому какое-то отношение. Моя первая мысль заключалась в том, что вы не можете использовать метод boolean contains(...)
в лямбда, потому что, когда возникла ошибка, он сказал:
Caused by: java.lang.IllegalArgumentException: Could not analyze lambda code
Итак, мой вопрос: возможно ли каким-либо образом использовать метод contains в String в lambdacode?