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