2016-06-06 3 views
2
for (final Prices ppr : prices) { 
    if (!currency.getCode().equals(ppr.getCurrency().getCode())) { 
     continue; 
    } 
    return ppr.getPrice(); 
    } 

위의 코드를 Java 스트림 코드로 변환 할 수 있습니까? 나는 그냥 제공된 답변을 확장 할 ... continue 키워드로Java 스트림에서 continue 키워드와 동일합니까?

+0

제공 한 예에서'continue'는 완전히 불필요합니다. –

답변

9
return prices.stream() 
    .filter(ppr -> currency.getCode().equals(ppr.getCurrent().getCode())) 
    .findFirst() 
    .orElseThrow(NoSuchElementException::new); 
+0

'통화 '는 최종적이거나 효과적이어야합니다. –

+1

.orElseThrow (NoSuchElementException :: new);를 수행 할 필요가 없습니다. 어쨌든 값이 없으면 get()은 예외를 throw합니다. – george

+4

@george 스타일의 문제입니다. 나는 옵션의 결과를 숨기는'Optional.get()'을 피하는 것을 선호한다. –

0

을 오류를 얻고 당신이 대신 .findFirst()의

return prices.stream() 
    .filter(ppr -> currency.getCode().equals(ppr.getCurrent().getCode())) 
    .findFirst() 
    .orElse(/* provide some default Price in case nothing is returned */); 

을 할 수 있습니다.를 반환하는) (취득 값은 비워서는 안됩니다. 따라서 일부 데이터가 반환 될 것으로 가정합니다. orElse 문을 사용하면 아무 것도 반환되지 않을 때를 대비하여 기본값을 제공 할 수 있습니다.

+0

수정했습니다. . docs로부터 get() 반환 값 :이 옵션에 의해 보관 유지되고있는 null 이외의 값은, 예외를 슬로우합니다. 값이 null이 아니지만 OP가 기본 결과를 제공하기 위해 orElse를 필요로한다고 가정합니다. – george