2017-10-04 5 views
-1

Ich habe ein Array String[] und ich möchte Array konvertieren Float[]Java 8 Streams: Convert String [] Float []

Betrachten e ist ein String[] über HttpServletRequest::getParameterMap() geliefert. Ich habe versucht:

Arrays.stream(e.getValue()).mapToDouble(Float::parseFloat).boxed().toArray(Float[]::new)); 

Got Ausnahme:

java.lang.ArrayStoreException: java.lang.Double

So dann habe ich versucht:

Arrays.stream(e.getValue()).mapToDouble(Double::parseDouble).boxed().toArray(Float[]::new)); 

Gleiches Ergebnis .

+0

Ersetzen Sie 'mapToDouble' für einen DoubleStream von Doubles mit' map' für String-Eingabeparameter für parseFloat. –

Antwort

0

Sie generieren immer noch ein Float[] Array in Ihrem zweiten Test.

Für einen Double[] Ergebnis Einsatz:

Arrays 
    .stream(e.getValue()) 
    .mapToDouble(Double::parseDouble) 
    .boxed() 
    .toArray(Double[]::new); 

Für ein Float[] Ergebnis (keine Notwendigkeit für boxed in diesem Fall), zu verwenden:

Arrays 
    .stream(e.getValue()) 
    .map(Float::parseFloat) 
    .toArray(Float[]::new); 
+0

Ziel ist es, 'Float []', nicht 'Double []' zu erzeugen. – lexicore

+0

@lexicore oops. Änderung. – Mena

9
Arrays.stream(e.getValue()).map(Float::valueOf).toArray(Float[]::new); 
0

Sie könnten versuchen, diese zu erzeugen, ein Float[] Array:

Arrays.stream(e.getValue()).map(Float::valueOf).toArray(Float[]::new); 

Sie müssen mit NumberFormatException umgehen können.

Leider gibt es keine Klasse FloatStream für primitive float, aber da Sie sowieso eine Float[] erhalten möchten, ist der obige Code in Ordnung.

+0

Duplikate [die andere Antwort] (https://stackoverflow.com/a/46565832/303810). – lexicore

+0

@Ivar Danke das habe ich behoben. –

+0

@lexicore Nun, ich habe noch ein paar Kommentare hinzugefügt, dann die Antwort, auf die du dich beziehst. –