2017-11-25 4 views
2

샘플 JSON은자바 8 람다 목록

[ 
    { 
    "id": "1", 
    "products": [ 
     { 
     "id": "333", 
     "status": "Active" 
     }, 
     { 
     "id": "222", 
     "status": "Inactive" 
     }, 
     { 
     "id": "111", 
     "status": "Active" 
     } 

    ] 
    }, 
    { 
    "id": "2", 
    "products": [ 
     { 
     "id": "6", 
     "status": "Active" 
     }, 
     { 
     "id": "7", 
     "status": "Inactive" 
     } 
    ] 
    } 
] 

나는이어야 하나 개의 활성 제품이 객체의 목록을 retieve 싶다. 아래 코드는 제품 목록을 반환하지만 ProdcutResponse 목록을 원합니다. 이걸 할 수있는 방법은 없나요?

response.stream() 
.map(ProductResponse::getProducts) 
.filter(s -> "Active".equals(s.getType())) 
.collect(Collectors.toList()) 

답변

1

많은 코드가 표시되지 않았기 때문에 어둠 속에서 촬영할 수 있습니다. 내 주요 제안은 목록에 수집하기 전에 Stream<List<Product>>Stream<ProductResponse>를 매핑하지하는 것입니다 : 당신이 활성 유형 Product들 (포함하도록 List<ProductResponse>을 원하는 경우

response.stream() 
     .filter(pr -> pr.getProducts().stream().anyMatch(s -> "Active".equals(s.getType()))) 
     .collect(Collectors.toList()); 

당신은 allMatch-anyMatch을 변경할 수 있습니다 어떤 그 의미는).