저는 List<User> users
입니다. 나는 두 조건을 기반으로 목록을 필터링하고 싶습니다. 을 FilterName람다를 사용하여 중첩 목록 필터링
공용 클래스 사용자가 엔티티를 구현 일치하는 사용자 아이디
일치
는- {
여기public User() { } private String userName; private String userId; private List<Filter> filters; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserId() { return userId; } public void setUserId(String userId) { this.userId = userId; } public List<Filter> getFilters() { return filters; } public void setFilters(List<Filter> filters) { this.filters = filters; } }
는 메소드 서명
List<User> users = getUsersList();
public List<User> query(String userID,String filterName){
users.stream().filter(element -> element.getUserID().equals(userID) && element.getFilters().stream().filter(f -> f.getFilterName().equals(filterName))).collect(Collectors.toList());
}
입니다위의 방법은 엘리먼트와 스트림을 기준으로 필터링을 수행하기 때문에 작동하지 않습니다. 아무도 필터링 목록 및 중첩 목록의 올바른 방법으로 나를 도울 수 있습니까?
나는이 방법
users.stream().filter(e -> e.getUserId().equals(predicate.getUserID())).collect(Collectors.toList()).stream().filter(f -> f.getFilters().stream().filter(fe -> fe.getName().equals(predicate.getFilterName()))).collect(Collectors.toList());
난 아래의 오류를
형식 불일치를 얻고 하나 방법을 시도 :
시도 아디 엘 Loingers 제안을 논리 값으로 스트림에서 변환 할 수 없습니다. 그것은 당신이 당신의 경우 filter
에 규정 된 동일 지정된 술어의 일치 boolean
사실을 반환
element.getFilters().stream().anyMatch(f -> f.getFilterName().equals(filterName))
에
element.getFilters().stream().filter(f -> f.getFilterName().equals(filterName))
을 변경해야
java.util.function.Predicate<Filter> con = e -> e.getName().equals(predicate.getFilterName());
result = users.stream().filter(p -> p.getUserId().equals(predicate.getUserID()) && p.getFilters().stream().anyMatch(con)).collect(Collectors.toList());
filterName 스트림에서'anymatch'를 사용하는 것은 어떻습니까? –
필터 목록에있는'filterName'을 확인하고 싶다면. element.getFilters(). stream() .filter (f -> f)로 단순히'element.getFilters(). stream() .filter (f -> f.getFilterName(). .filterName.equals (FilterName)). findAny(). isPresent()' –