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[])

Antworten:


9

Warum nicht

IntStream.range(0, shortarray.length)
         .mapToObj(s -> shortarray[s])
         .collect(Collectors.toList());

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).


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


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.