2016-10-07 2 views
6

매개 변수 Stream<Double> stream을 사용하는 정적 메서드가 있습니다. arraylist.stream() 또는 Arrays.stream(array) 중 하나입니다.람다 식을 메서드 참조로 바꾸기

이 메서드의 작업은 3으로 나눌 수있는 모든 정수의 합계를 반환하는 것입니다. 이 방법은 작동

return stream.filter(i -> i.intValue() % 3 == 0).mapToInt(i -> i.intValue()).sum()

그러나 인 IntelliJ는 다음과 같은 제안한다 :

이 검사 방법을 참조로 대체 할 수 람다를보고합니다.

나는 메소드 참조, 특히 클래스 이름을 사용하는 참조 인스턴스 메소드에 익숙하지 않다.

다음과 같은 오류가 발생했습니다.

stream.filter(i -> i.intValue() % 3 == 0).mapToInt(Integer::intValue).sum()

어떤 제안이?

+6

'i'는 Double이므로 'Double :: intValue'를 사용해야합니다. IntelliJ는 검사뿐만 아니라 변경을 제안합니다. alt-enter를 누르십시오. – mrjink

+2

IntelliJ에서 그러한 대체품을 제안하면 해당 대체물을 지시 할 수 있습니다. 그건 그렇고,'.mapToInt (Double :: intValue) .filter (i -> i % 3 == 0) ' – Holger

+1

@Holger는 순서를 뒤집어 버릴 가능성을 실행하지 않는다. 반올림하여 정수로 배가 한 다음 3으로 나누고 결과를 변경 하시겠습니까? –

답변

7

당신은 매개 변수 스트림은 두 종류이고, 그래서 당신은 Double 클래스 '있는 intValue 함수를 호출하기 때문에 당신은

stream.mapToInt(Double::intValue).filter(i -> i % 3 == 0).sum() 

을해야한다.