2014-02-22 13 views
5

war nur meine Hände schmutzig mit Java 8 und stolperte, als unten auf ein Verhalten -Java 8 Streams int und Integer

public static void main(String... args){ 
    System.out.println("[Start]"); 
    int[] ints = {1, 2, 3, 4}; 
    Stream.of(ints).forEach(i->System.out.println("Int : "+i)); 


    Integer[] integerNums = {1, 2, 3, 4}; 
    Stream.of(integerNums).forEach(i->System.out.println("Integer : "+i)); 

    System.out.println("[End]"); 
} 

Und der Ausgang ist:

[Start] 
Int : [[email protected] 
Integer : 1 
Integer : 2 
Integer : 3 
Integer : 4 
[End] 

Während ich das erwartet hatte Code, um alle int und Integer in beiden Fällen zu drucken? Irgendwelche Einblicke darauf wären sehr hilfreich ...

Antwort

11

Generics funktionieren nicht mit primitiven Typen. Die Stream.of Methode deklariert als

static <T> Stream<T> of(T... values) 

Wenn Sie

Stream.of(ints) 

verwenden, wo ints ist ein int[], Java nicht eine Reihe von int Elemente (Urtyp) sehen, sieht es ein einzelnes Element int[] (Dies ist ein Referenztyp). So ist die einzelne int[] als das einzige Element in dem Array, das durch T... values dargestellt wird, gebunden.

So wird values eine int[][] und jedes seiner Elemente ist ein int[], die wie drucken

[[email protected] 
+5

Sie 'IntStream.of' für ints verwenden können. – nosid