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[])
mapToObj
und nichtmapToInt
(oder einfachmap
)? Die Verwendung vonIntStream
anstelle vonStream<Integer>
sollte in fast allen Situationen vorzuziehen sein, in denen primitive Ints oder Shorts verwendet werden.mapToInt
Sammeln Sie endlich eineList<Integer>
Instanz, nicht eineList<Short>
.List<Short>
, so dass Boxen nicht vermieden werden kann.List<Short>
. Nicht, dass ich jemals im wirklichen Leben auf ein solches Bedürfnis gestoßen wäre…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).
quelle
Es gibt eine andere Möglichkeit, ein kurzes Array in eine Sammlung umzuwandeln.
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
quelle
short[]
nicht konvertierenShort[]
Arrays
Klasse 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.