정수 목록을 합치고 싶습니다. 다음과 같이 작동하지만 구문이 옳지 않습니다. 코드를 최적화 할 수 있습니까?
Map<String, Integer> integers;
integers.values().stream().mapToInt(i -> i).sum();
i -> i
개인적으로 매우 분명합니다. 글쎄, 당신은 그 값이 자동으로 언 박싱 될 것이라는 것을 알아야한다. 그러나 그것은 자바 5 이후 사실이다.
foo(int i)
쓰지 않습니다 foo(myInteger.intValue());
(적어도 나는 기대하지 않습니다 !!). Integer::intValue
더 명시 적이지만 귀하도 여기에 동일하게 적용됩니다. 사람들은 한 번만 배우면 끝납니다 :-). 마술 난독 화와는 다릅니다.
i -> i
no-op처럼 보이고 개념적 으로 는 no-op입니다. 물론 후드 아래에서 Integer.intValue()
호출되지만 후드 아래에서 더 깊어지면 해당 메소드가 소스 코드에서와 같이 정확하게 no-op가되도록 인라인됩니다. Integer::intValue
바이트 코드에서 합성 메소드를 작성하지 않는 보너스 포인트가 있지만 소스 코드를 구성하는 방법을 결정 해야하는 것은 아닙니다.
mapToLong
지도가 가질 수있는 값에 따라 오버플로를 피하기 위해 사용하고 싶을 수도 있습니다.