2015-01-16 2 views
2

나는 각 FrameworkAdminLeftMenu 객체 메소드Java 8 스트림에서 내부 집합을 필터링하는 방법은 무엇입니까?

public Set<FrameworkAdminLeftMenuCategories> getFrameworkAdminLeftMenuCategorieses() { 
     return this.frameworkAdminLeftMenuCategorieses; 
} 

및 방법을 가지고

List<FrameworkAdminLeftMenu> menu = getMenuFromDB(); 

객체 목록을

public String getCssClassName() { 
     return this.cssClassName; 
} 

FrameworkAdminLeftMenuCategories 객체는 방법

public Integer getId() { 
     return this.id; 
} 
,369있다

FramAdminLeftMenuCategories 개체를 가져 오기 위해 모든 목록 및 집합을 필터링하는 방법은 getId(1)입니까? 예를 들어

, 난 당신이 모든 세트의 범주를 집계하고 오른쪽 ID로 사람을 필터링 할, 정확하게 질문을 이해하면

List<FrameworkAdminLeftMenu> collect = menu.stream() 
       .filter(
         f -> f 
         .getCssClassName() 
         .contains("adm-content") 
       ) 
       .collect(Collectors.toList()); 

     List<FrameworkAdminLeftMenuCategories> categs = collect 
       .stream() 
       .filter(
         f -> f. 
         getFrameworkAdminLeftMenuCategorieses() 
         .stream() 
         .filter(c -> c.getId() == 1) 
       ) 
       .collect(Collectors.toList()); 
+1

"Categorieses"복수를? :-) –

+1

당신이 무엇을 요구하고 있는지 확실하지 않습니다. 모든 카테고리의 콜렉션이 그 ID를 가진 모든 세트를 형성하도록 하시겠습니까? (> 함수 <슈퍼 T ,? 스트림 연장?) 오 R은 - (> f.getFrameworkAdminLeftMenuCategorieses (F))이 가 flatMap의 유형이 경우, 시도'.flatMap에 –

답변

1

같은. 이 경우 flatMap을 사용해야합니다.

(분명히, 검증되지 않은) 같은 것을보십시오 : 복수의

List<FrameworkAdminLeftMenuCategories> categs = menu.stream() 
     .filter(f -> f.getCssClassName().contains("adm-content")) 
     .flatMap(f -> f.getFrameworkAdminLeftMenuCategorieses().stream()) 
     .filter(c -> c.getId() == 1) 
     .collect(Collectors.toList()); 
+0

Uncompilable 코드 flatMap' T는 타입 변수입니다 : R extends 메소드 선언 된 객체 flatMap (Function >) T는 스트림에서 선언 된 객체를 확장합니다. –

+0

@ArthurKhusntudinov 나는'.stream 'flatMap' 라인의 마지막에. 지금 작동합니까? –

+0

굉장! 고마워요! –