Tôi có một mảng nổi và tôi muốn chuyển đổi nó thành một mảng đôi trong Java. Tôi nhận thức được cách rõ ràng của việc lặp qua mảng và tạo một mảng mới. Tôi mong đợi Java tiêu hóa một float [] suôn sẻ nơi nó muốn làm việc với double [] ... nhưng nó không thể làm việc với điều này. Cách hiệu quả, thanh lịch để thực hiện chuyển đổi này là gì?Làm thế nào để chuyển đổi mảng nổi để mảng của đôi trong Java?
Trả lời
Về cơ bản nội dung nào đó phải thực hiện chuyển đổi từng giá trị. Không có chuyển đổi ngầm giữa hai loại mảng vì mã được sử dụng để xử lý chúng sau khi JITting sẽ khác nhau - chúng có kích thước phần tử khác nhau và float sẽ cần một chuyển đổi trong khi double sẽ không. So sánh điều này với mảng hiệp phương sai cho các kiểu tham chiếu, khi không có chuyển đổi được yêu cầu khi đọc dữ liệu (ví dụ mẫu bit giống nhau cho tham chiếu chuỗi như tham chiếu đối tượng) và kích thước phần tử giống nhau cho tất cả các loại tham chiếu.
Tóm lại, một cái gì đó sẽ phải thực hiện chuyển đổi trong một vòng lặp. Tôi không biết bất kỳ phương pháp tích hợp nào để thực hiện việc này. Tôi chắc chắn rằng họ tồn tại trong thư viện của bên thứ ba ở đâu đó, nhưng trừ khi bạn tình cờ sử dụng một trong những thư viện đó, tôi chỉ viết phương pháp của riêng bạn. Để thuận tiện, dưới đây là triển khai mẫu:
public static double[] convertFloatsToDoubles(float[] input)
{
if (input == null)
{
return null; // Or throw an exception - your choice
}
double[] output = new double[input.length];
for (int i = 0; i < input.length; i++)
{
output[i] = input[i];
}
return output;
}
Bạn có thể làm cho nó một phương pháp mở rộng quá. – Seth
@Seth: Đây là Java chứ không phải C#. –
Bạn có thể đặt tên cho nó là 'convertToDoubles' hoặc' toDoubles' và cung cấp quá tải cho các kiểu nguyên thủy (và đóng hộp) khác. –
Bạn có thực sự cần sao chép mảng nổi của mình thành mảng kép không? Nếu bạn đang gặp rắc rối với trình biên dịch và các loại khi sử dụng phao bạn có thể sử dụng ...
float x = 0;
double d = Double.valueOf(x);
Bạn có được lợi thế gì khi lấy một bản sao? Nếu bạn cần độ chính xác cao hơn trong các kết quả tính toán dựa trên các phao nổi thì thực hiện các kết quả double
. Tôi có thể thấy khá nhiều nhược điểm để có một bản sao của mảng, và thực hiện chức năng sao chép, đặc biệt là nếu nó là lớn. Hãy chắc chắn rằng bạn thực sự cần phải làm điều đó.
HTH
Tôi thấy một lý do rất rõ ràng: gọi một phương thức cần một 'double []' trong khi bạn có dữ liệu trong 'float []'. –
rõ ràng, nhưng OP không đề cập đến điều đó. Tôi chỉ muốn đưa ra một giải pháp thay thế kể từ khi anh ấy yêu cầu. – Simon
Andreas_D giải thích nó. Tôi cần làm hai thư viện để chơi với nhau. Một trong số đó làm việc với các vectơ [] kép, cái kia có float [] (vectơ theo nghĩa toán học). Java rắc rối với mảng đúc, phù hợp với các thư viện này không phải là đơn giản. Dường như không tồn tại bất kỳ giải pháp nào mà không cần lặp lại mảng. Cảm ơn vi đa trả lơi. – fifigyuri
Trong Java 8 bạn có thể, nếu bạn thực sự muốn, làm:
IntStream.range(0, floatArray.length).mapToDouble(i -> floatArray[i]).toArray();
Nhưng nó tốt hơn (sạch hơn, nhanh hơn, ngữ nghĩa tốt hơn) để sử dụng chức năng Jon Skeet.
Tôi không mua Jon Skeet là tốt hơn. Trong thực tế, điều này có thể được tối ưu hóa nhanh hơn và thực hiện song song.Đó là rõ ràng những gì đang xảy ra và cũng có thể được chuyển thành tương đương chức năng của (double []) floatArray. Lý do để sử dụng các luồng là để nó cho trình biên dịch biết chúng ta không quan tâm nó được thực hiện như thế nào hoặc theo thứ tự nào, chỉ cần ánh xạ tất cả các giá trị này tới các giá trị khác. Thay vì lặp qua chúng bên ngoài. – Tatarize
- 1. Làm thế nào để chuyển đổi mảng nổi 2D thành mảng 2D thành mảng numpy?
- 2. Làm thế nào để chuyển đổi một mảng byte thành đôi trong C?
- 3. Làm thế nào để chuyển đổi ndarray thành mảng?
- 4. Làm thế nào để chuyển đổi hai mảng chiều để một mảng chiều trong php5
- 5. Làm cách nào để chuyển đổi chuỗi thành mảng mảng?
- 6. Chuyển đổi một mảng đúp để đôi ArrayList
- 7. Làm thế nào để chuyển đổi danh sách các mảng thành một mảng đa chiều
- 8. chuyển đổi chuỗi mảng để nguyên mảng
- 9. Làm thế nào để chuyển đổi chuỗi thành mảng byte?
- 10. Làm thế nào để chuyển đổi mảng int thành int?
- 11. Làm thế nào để chuyển đổi một mảng boolean để một mảng int
- 12. làm thế nào để chuyển đổi hình ảnh thành mảng byte trong java?
- 13. Làm thế nào để làm cho một mảng của mảng trong Java
- 14. làm thế nào để chuyển đổi json/mảng từ ajax responseText trong mảng javascript?
- 15. Làm thế nào để chuyển đổi một mảng các chuỗi thành một mảng float trong numpy?
- 16. Làm thế nào để chuyển đổi mảng byte thành hexString trong java?
- 17. Làm thế nào để chuyển đổi một mảng byte thành Base64 trong Java?
- 18. Chuyển đổi mảng mảng thành một mảng của chuỗi
- 19. Làm thế nào để chuyển mảng java sang mảng javaScript bằng cách sử dụng jsp?
- 20. Làm thế nào để chuyển đổi chuỗi hex để nổi trong Java?
- 21. Chuyển đổi char * để thả nổi hoặc gấp đôi
- 22. Làm thế nào để tạo mảng mảng trong PowerShell?
- 23. Làm thế nào để chuyển đổi một đôi để hex?
- 24. Cách chuyển đổi mảng 4 byte thành float trong java
- 25. Làm thế nào để chuyển đổi một mảng kết quả ActiveRecord thành một mảng bình thường?
- 26. Làm thế nào để chuyển đổi một mảng byte thành một mảng int?
- 27. Làm thế nào để chuyển đổi mảng ruby thành mảng C với RubyInline?
- 28. Làm thế nào để chuyển đổi mảng char thành mảng chuỗi?
- 29. Chuyển đổi IList để mảng trong C#
- 30. Chuyển đổi NodeList để mảng
Không có cách nào để "thanh lịch" làm điều này bởi vì phao và đôi là các kiểu dữ liệu hoàn toàn khác nhau theo kích thước và mẫu bit. Vì vậy, cách rõ ràng là người duy nhất. –