Wie konvertiere ich short [] in List <Short> in Java mit Streams?

8

Ich dachte, ich könnte aus dieser Frage extrapolieren , aber ich kann nicht

Das kann ich natürlich

short[] shortarray = {0,1,2};
List<Short> shortList = new ArrayList<Short>();
for (Short s : shortarray) {
    shortList.add(s);
}

Aber ich frage mich, wie ich das mit Streams machen soll.

List<Short> shortList = Arrays.stream(shortarray).boxed()
                              .collect(Collectors.toList());

funktioniert zum Beispiel nicht, liefert aber The method stream(T[]) in the type Arrays is not applicable for the arguments (short[])

Peer
quelle

Antworten:

9

Warum nicht

IntStream.range(0, shortarray.length)
         .mapToObj(s -> shortarray[s])
         .collect(Collectors.toList());
ernest_k
quelle
Warum mapToObjund nicht mapToInt(oder einfach map)? Die Verwendung von IntStreamanstelle von Stream<Integer>sollte in fast allen Situationen vorzuziehen sein, in denen primitive Ints oder Shorts verwendet werden.
Polygnome
mapToIntSammeln Sie endlich eine List<Integer>Instanz, nicht eine List<Short>.
Sachith Dickwella
1
@Polygnome Ich glaube, Sie haben einen Punkt, aber das OP sammelt Elemente in einem List<Short>, so dass Boxen nicht vermieden werden kann.
ernest_k
1
@Polygnome "in fast allen Situationen", außer wenn die Aufgabe darin besteht, eine zu produzieren List<Short>. Nicht, dass ich jemals im wirklichen Leben auf ein solches Bedürfnis gestoßen wäre…
Holger
1

Warum funktioniert es nicht mit einem primitiven Kurzfilm []:

Es gibt keinen Stream-Kurzschluss. Streams funktionieren nur für nicht primitive Typen oder mit IntStream, LongStream und DoubleStream .

Damit dies funktioniert, müssten Sie Ihre Shorts in einen Datentyp mit einem kompatiblen Stream konvertieren, z. B. Short, oder in int für einen IntStream (siehe Antwort von ernest_k).

lugiorgi
quelle
Ja, Sie können es nicht umsetzen, aber Sie können jeden Eintrag konvertieren. Ich habe das in einer Bearbeitung klargestellt. Ich denke, das "Warum" ist auch wichtig für eine Antwort und sollte aufgenommen werden.
Lugiorgi
0

Es gibt eine andere Möglichkeit, ein kurzes Array in eine Sammlung umzuwandeln.

  1. Konvertieren Sie Short in Short Object Array
  2. Verwenden Sie die Arrays.asList-Methode, um Short [] in List zu konvertieren und diese dann mithilfe von Streams zu durchlaufen.

Siehe unten Beispielcode,

Short[] shortarray = {0,1,2}; List<Short> shortList1 = Arrays.asList(shortarray); shortList1.stream().forEach(aShort -> {System.out.println(aShort);});

Hoffe das hilft.

Danke Sandy

Sandig
quelle
OP will short[]nicht konvertierenShort[]
Karthikeyan Vaithilingam
Tatsächlich betrachtet die ArraysKlasse derzeit nur int, long, double oder beliebige Objekttypen als Parameter. Eine einfache Antwort ist derzeit "nicht möglich", so kurz wie der Parameter für die Stream-Methode der Arrays-Klasse. Hinweis: Meine Meinung zur Unterstützung von Arrays.stream-Parametern gilt bis Java 1.8 aus meiner Dokumentüberprüfung.
Sandy