2017-05-01 2 views
0

Ich habe ein paar Zahlen in ein HashSet, dann versuchen, einen int[] mit Strom zu erhalten:Warum in einen Stream <E> werfen?

HashSet set = new HashSet<Integer>(); 
    set.add(1); 
    set.add(2); 
    set.add(3); 

    int[] ii = set.stream().mapToInt(i -> ((Integer)i).intValue()).toArray(); 

es gut funktioniert. Meine Frage ist , warum muss ich i in eine Integer für es arbeiten? Wenn ich nicht gieße, bleibt i ein Object.

Nach dem docs sollte stream() zurückkehren ein Stream<E>, wo E in diesem Fall Integer ist. Deshalb habe ich die Besetzung nicht erwartet.

+2

Schauen Sie sich die deklarierte Art von 'Set' an - Sie verwenden den Raw-Typ. War das absichtlich? Wenn Sie einen 'HashSet ' als deklarierten Typ verwendet haben, können Sie feststellen, dass die Dinge besser funktionieren. –

+0

Mein schlechtes. Ein sorgloser Blick. Vielen Dank. –

+0

In Bezug auf den Anspruch der Vervielfältigung, wenn Sie die Antwort kennen, dann ist es ein Duplikat. Aber wenn du die Antwort nicht kennst (und verwirrt wie ich), dann ist das eigentlich ein ganz anderer Ausgangspunkt. Stellen Sie sich vor, dass jemand genau das gleiche Problem hat wie ich, der keine Ahnung hat, wo es schief gelaufen ist und nichts mit "Rohart" zu tun hat, hätte er die andere Frage gesucht und gefunden? Ein definitives NEIN. –

Antwort

0

Sie haben HashSet als RawType, deshalb kommt dieses Problem. Versuchen Sie Folgendes zu machen:

HashSet<Integer> set = new HashSet<Integer>(); 
set.add(1); 
set.add(2); 
set.add(3); 
int[] ii = set.stream().mapToInt(i -> (i).intValue()).toArray(); 
Verwandte Themen