2012-02-01 27 views
6

Tôi có một mảng chuỗi như:Làm thế nào để chuyển đổi chuỗi Array đúp Array trong một dòng

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

Tất cả các giá trị chuỗi là những con số. Dữ liệu phải được chuyển đổi thành Double[].

Câu hỏi
Có một giải pháp một dòng trong Java để đạt được điều này hay chúng ta cần lặp và chuyển đổi từng giá trị thành Double?

+1

Bạn sẽ cần lặp lại. – Jivings

+0

Tại sao không phải 'double [] '? Nó nhanh hơn. –

+0

Vòng lặp và chuyển đổi mỗi một trong số họ, là những gì bạn có thể làm. – asgs

Trả lời

6

Tạo phương thức triển khai thực hiện bằng vòng lặp, sau đó gọi phương thức của bạn và bạn sẽ có giải pháp một dòng.

Không có phương pháp buit-in trong API Java để thực hiện điều đó.

0

Tôi nghĩ bạn sẽ phải lặp lại và chuyển đổi từng giá trị thành gấp đôi. Đây là cách tôi đã làm điều đó trong một trong các câu hỏi khác của tôi:

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

Ý tưởng là như nhau. Biến nó thành một phương pháp, vượt qua các tham số của bạn và bạn vàng.

+0

Ngoại trừ việc bạn thiếu một loại trong vòng lặp for; và nếu anh ta muốn nhận được một mảng ra (như trái ngược với một danh sách mà anh ta có thể nối thêm), bạn sẽ thực sự cần phải biết chỉ số nguyên. –

+0

Tôi đã không làm rõ rằng mã tôi cung cấp là một snip từ một kịch bản Beanshell mà tôi đã làm việc trên, do đó thiếu một kiểu dữ liệu. – Carlos

0

Điều gì sai với vòng lặp?

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

không đặc biệt vụng về. Ngoài ra, bạn có thể dễ dàng thêm xử lý lỗi thích hợp.

Tất nhiên bạn có thể dễ dàng quấn thứ này theo ý muốn.

OpenJDK8 có thể sẽ mang biểu thức lambda và sử dụng Double.valueOf làm chức năng "bản đồ" sẽ là một ví dụ điển hình cho việc sử dụng tính năng này.

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

EDIT

Hãy ghi nhớ rằng đây không phải là trong JavaSDK! Tôi đang sử dụng http://commons.apache.org/collections/apidocs/org/apache/commons/collections/CollectionUtils.html

+1

Bạn đã bỏ lỡ dấu chấm phẩy và định dạng khiến bạn khó đọc; cố định điều đó. Nó cũng đáng chú ý rằng đây không phải là một phần của java cốt lõi mà là một phần của 'org.apache.commons.collections' - được nói, câu trả lời xuất sắc. (Tôi muốn +1 bạn nhưng tôi đã hết phiếu bầu trong ngày) –

+0

lol! cảm ơn vì đã chỉnh sửa! Tôi giống như bộ sưu tập commons cho mục đích này! –

1

Bạn muốn hoạt động trên bản đồ từ lập trình chức năng, rất tiếc là Java không cung cấp. Thay vào đó, bạn phải vòng lặp như

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

Trong một dòng: p

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

Java 8 Stream API cho phép để làm điều này:

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

ruột đúp được sử dụng như một tài liệu tham khảo phương pháp. Read more here.

Trước khi sử dụng mã đừng quên import java.util.Arrays;

UPD: Nếu bạn muốn cast mảng của bạn để đôi [], không phải tăng gấp đôi [], bạn có thể sử dụng đoạn mã sau:

Double[] doubleValues = Arrays.stream(guaranteedOutput) 
         .map(Double::valueOf) 
         .toArray(Double[]::new); 
Các vấn đề liên quan