2012-02-01 12 views
6

Mam tablicę ciągów jako:Jak przekonwertować tablicy ciągów Double tablicy w jednej linii

String[] guaranteedOutput = Arrays.copyOf(values, values.length, 
String[].class); 

Wszystkie wartości ciągu są liczbami. Dane powinny zostać przekonwertowane na Double[].

Pytanie
Czy istnieje rozwiązanie jeden wiersz w języku Java, aby osiągnąć to czy musimy pętli i przekształcić każdą wartość do podwójnego?

+1

trzeba będzie pętli. – Jivings

+0

Dlaczego nie "podwoić []'? Jest szybsze. –

+0

Loop i konwertować każdy z nich jest to, co można zrobić. – asgs

Odpowiedz

6

Utwórz metodę implementującą ją za pomocą pętli, a następnie wywołaj metodę, a otrzymasz rozwiązanie jednokreskowe.

Nie ma metody buit-in w Java API, aby to zrobić.

0

Myślę, że będziesz musiał przechodzić i konwertować każdą wartość do podwójnego. Oto, jak to zrobiłem na jednym z pozostałych pytań:

for(getData : getDataArray){ 
double getTotal; 
getTotal = getTotal + Double.parseDouble(getData); 
} 
return getTotal; 

Pomysł jest taki sam. Kolei, że w metodzie zdać paramters i jesteś złoty.

+0

Tyle tylko, że brakuje ci wpisu w pętli for; i jeśli chce uzyskać tablicę (w przeciwieństwie do listy, do której może się przyłączyć), będziesz musiał znać indeks liczby całkowitej. –

+0

Nie wyjaśniłem, że podany przeze mnie kod jest fragmentem skryptu Beanshell, nad którym pracowałem, stąd brak typu danych. – Carlos

0

Co jest nie tak z pętlą?

double[] parsed = new double[values.length]; 
for (int i = 0; i<values.length; i++) parsed[i] = Double.valueOf(values[i]); 

nie jest szczególnie niezgrabny. Dodatkowo możesz łatwo dodać odpowiednią obsługę błędów.

Oczywiście możesz go łatwo owinąć, jak chcesz.

OpenJDK8 prawdopodobnie przynieść wyrażeń lambda i używając Double.valueOf jako funkcji „Mapa” byłoby najlepszym przykładem wykorzystania tego.

1
CollectionUtils.collect(guaranteedOutput, new Transformer() { 
     public Object transform(Object i) { 
      return Double.parseDouble(i); 
     } 
}); 

EDIT

Należy pamiętać, że to nie jest w JavaSDK! Używam http://commons.apache.org/collections/apidocs/org/apache/commons/collections/CollectionUtils.html

+1

Brakowało Ci średnika, a formatowanie utrudniało czytanie; naprawiono to. Warto również zauważyć, że nie jest to część core java, ale raczej część 'org.apache.commons.collections' - co oznacza doskonałą odpowiedź. (Chciałbym dać ci +1, ale nie mam głosów za dzień) –

+0

lol! dzięki za edycję! W pewnym sensie lubię kolekcje commons! –

1

Chcesz operację mapy z programowania funkcyjnego, który niestety Java nie oferują. Zamiast tego trzeba pętli jako

double[] nums = new double[guaranteedOutput.length]; 
for (int i = 0; i < nums.length; i++) { 
    nums[i] = Double.parseDouble(guaranteedOutput[i]); 
} 
5

w jednej linii: p

Double[] d=new ArrayList<Double>() {{for (String tempLongString : tempLongStrings) add(new Double(tempLongString));}}.toArray(new Double[tempLongStrings.length]); 
19

Java 8 Stream API pozwala, aby to zrobić:

double[] doubleValues = Arrays.stream(guaranteedOutput) 
         .mapToDouble(Double::parseDouble) 
         .toArray(); 

podwójny dwukropek jest używany jako odniesienie metody. Read more here.

Przed użyciem kodu nie zapomnij import java.util.Arrays;

UPD: Jeśli chcesz oddać swój wachlarz Double [], nie podwoić [], można użyć następującego kodu:

Double[] doubleValues = Arrays.stream(guaranteedOutput) 
         .map(Double::valueOf) 
         .toArray(Double[]::new); 
Powiązane problemy