2015-06-09 14 views
19

Właśnie zauważyłem, że JDK8 wprowadził tę metodę Integer klasy:Dlaczego Java 8 wprowadzać * Integer.sum (int a, int b) *

/** 
* Adds two integers together as per the + operator. 
* 
* @param a the first operand 
* @param b the second operand 
* @return the sum of {@code a} and {@code b} 
* @see java.util.function.BinaryOperator 
* @since 1.8 
*/ 
public static int sum(int a, int b) { 
    return a + b; 
} 

Jaki jest sens tej metody? Dlaczego powinienem wywołać tę metodę zamiast używać operatora +? Jedyną możliwością mogę pomyśleć, to że, na przykład, podczas mieszania ciągi i wskazówki Zmiany + operator znaczenie, więc

System.out.println("1"+2+3); // prints 123 
System.out.println("1"+Integer.sum(2,3)); // prints 15 

ale używając nawiasów będzie działać w każdym razie

System.out.println("1"+(2+3)); // prints 15 

Odpowiedz

32

Może to być użyteczne jako odwołanie do metody (Integer::sum) przekazane do metody wymagającej odpowiedniego interfejsu funkcjonalnego (IntBinaryOperator).

Na przykład:

int sum = IntStream.range(1,500).reduce(0,Integer::sum); 

Oczywiście ten przykład można użyć .sum() zamiast zmniejszać. Właśnie zauważyłem, że Javadoc dla IntStream.sum wspomina tę dokładną redukcję jako będącą odpowiednikiem sum().

+0

Uhm ... to chyba coś, czego jeszcze nie studiowałem. –

+0

To samo. Nigdy nie widziałem tego. –

+0

O wiele ciekawsze pytanie brzmi: co z "różnicą", "produktem" i "ilorazem"? (Może za mało "oczywistych" przypadków użycia, ale to, czy używa się 'Integer :: sum' lub' (a, b) -> (a + b) 'nie ma znaczenia tak wiele ...) – Marco13

Powiązane problemy