Cách dễ nhất/ngắn nhất để chuyển đổi Java 8 Stream
thành một mảng là gì?Làm thế nào để chuyển đổi một dòng Java 8 thành một mảng?
Trả lời
Phương pháp dễ nhất là sử dụng phương pháp toArray(IntFunction<A[]> generator)
với tham chiếu hàm tạo mảng. Điều này được đề xuất trong số API documentation for the method.
String[] stringArray = streamString.toArray(String[]::new);
gì nó làm, là tìm một phương pháp mà mất trong một số nguyên (kích thước) như là đối số, và trả về một String[]
, đó là chính xác những gì (một trong những định nghĩa chồng cho) new String[]
làm.
Bạn cũng có thể viết riêng bạn IntFunction
:
Stream<String> stream = ...;
String[] stringArray = stream.toArray(size -> new String[size]);
Mục đích của IntFunction<A[]> generator
là để chuyển đổi một số nguyên, kích thước của mảng, một mảng mới.
Ví dụ mã:
Stream<String> streamString = Stream.of("a", "b", "c");
String[] stringArray = streamString.toArray(size -> new String[size]);
Arrays.stream(stringArray).forEach(System.out::println);
Prints:
a
b
c
'String [] :: new' là một mẹo hay; đơn giản hơn biểu thức lambda, theo ý kiến của tôi. – Zenexer
Zenexer đúng, giải pháp phải là: 'stream.toArray (String [] :: new);' – sys64738
và đây là giải thích tại sao và cách tham chiếu hàm tạo của mảng thực sự hoạt động: http://stackoverflow.com/ câu hỏi/29447561/how-do-java-8-array-constructor-references-work –
Nếu bạn muốn nhận được một mảng ints, bằng giá trị dạng 1 đến 10, từ một Stream, có IntStream theo ý của bạn .
Ở đây chúng tôi tạo Luồng bằng phương thức Stream.of và chuyển đổi Luồng sang IntStream bằng cách sử dụng mapToInt. Sau đó chúng ta có thể gọi phương thức toArray của IntStream.
Stream<Integer> stream = Stream.of(1,2,3,4,5,6,7,8,9,10);
//or use this to create our stream
//Stream<Integer> stream = IntStream.rangeClosed(1, 10).boxed();
int[] array = stream.mapToInt(x -> x).toArray();
Đây là điều tương tự, mà không Luồng, chỉ sử dụng các IntStream
int[]array2 = IntStream.rangeClosed(1, 10).toArray();
Bạn có thể tạo một nhà sưu tập tùy chỉnh mà chuyển đổi một dòng để mảng.
public static <T> Collector<T, ?, T[]> toArray(IntFunction<T[]> converter)
{
return Collectors.collectingAndThen(
Collectors.toList(),
list ->list.toArray(converter.apply(list.size())));
}
và sử dụng nhanh chóng
List<String> input = Arrays.asList(.....);
String[] result = input.stream().
.collect(CustomCollectors.**toArray**(String[]::new));
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5, 6);
Integer[] integers = stream.toArray(it->new Integer[it]);
Bạn có thể chuyển đổi một dòng java 8 đến một mảng sử dụng khối này mã đơn giản:
String[] myNewArray3 = myNewStream.toArray(String[]::new);
Nhưng chúng ta hãy giải thích điều hơn, trước tiên, hãy tạo danh sách chuỗi chứa ba giá trị:
String[] stringList = {"Bachiri","Taoufiq","Abderrahman"};
Tạo một dòng suối từ Array đưa ra:
Stream<String> stringStream = Arrays.stream(stringList);
bây giờ chúng tôi có thể thực hiện một số hoạt động vào hoạt động này Ex:
Stream<String> myNewStream = stringStream.map(s -> s.toUpperCase());
và cuối cùng là chuyển nó sang một java 8 mảng sử dụng các phương pháp :
Phương thức 1 cổ điển (Giao diện chức năng)
IntFunction<String[]> intFunction = new IntFunction<String[]>() {
@Override
public String[] apply(int value) {
return new String[value];
}
};
String[] myNewArray = myNewStream.toArray(intFunction);
2 -Lambda biểu
String[] myNewArray2 = myNewStream.toArray(value -> new String[value]);
3- Phương pháp tham khảo
String[] myNewArray3 = myNewStream.toArray(String[]::new);
Phương pháp tham khảo Giải thích:
Đó là một cách khác để viết một biểu thức lambda rằng đó là đúng tương đương với người kia.
Sử dụng phương pháp toArray(IntFunction<A[]> generator)
thực sự là một cách rất thanh lịch và an toàn để chuyển đổi (hoặc chính xác hơn, thu thập) Luồng vào một mảng cùng loại Luồng.
Tuy nhiên, nếu loại mảng được trả về không quan trọng, chỉ cần sử dụng phương pháp toArray()
là cả hai ngắn hơn dễ dàng hơn và. Ví dụ:
Stream<Object> args = Stream.of(BigDecimal.ONE, "Two", 3);
System.out.printf("%s, %s, %s!", args.toArray());
- 1. Làm thế nào để chuyển đổi một dòng đối tượng JSON thành một mảng với JQ
- 2. Làm thế nào để chuyển đổi một Java-Array thành một JavaCV-Matrix?
- 3. Làm thế nào để chuyển đổi một luồng Java thành dòng Scala
- 4. Làm cách nào để chuyển đổi chuỗi UTF-8 thành một mảng các byte trong Dart?
- 5. Làm thế nào để chuyển đổi một mảng byte thành Base64 trong Java?
- 6. 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?
- 7. 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?
- 8. Làm thế nào để chuyển đổi một mảng byte thành một mảng int?
- 9. Làm thế nào để chuyển đổi một byte thành bit?
- 10. Chuyển đổi vòng lặp lồng nhau thành dòng Java 8
- 11. Làm thế nào để chuyển đổi một LocalDate thành Instant?
- 12. Làm thế nào để chuyển đổi một byte thành một đoạn dài trong Java?
- 13. Cách chuyển đổi một mảng thành một bộ trong Java
- 14. Java 8 Lambda để chuyển đổi Số [] [] thành gấp đôi [] []
- 15. Làm thế nào để bạn chuyển đổi một mảng byte thành một thể hiện Bitmap (.NET)?
- 16. Làm thế nào để chuyển đổi BufferedImage thành 8 bit?
- 17. Làm thế nào để chuyển đổi đầu ra lệnh thành một dòng mảng bằng dòng trong bash?
- 18. Dòng Java toArray() chuyển đổi thành một loại cụ thể của mảng
- 19. Làm thế nào để chuyển đổi một chuỗi thành CharSequence?
- 20. Làm thế nào tôi có thể chuyển đổi một mảng byte thành một double và back?
- 21. Làm thế nào để chuyển đổi một số ("") thành Không có trong một dòng?
- 22. Làm thế nào để chuyển đổi danh sách các mảng thành một mảng đa chiều
- 23. Trong Golang, làm thế nào để bạn chuyển đổi một slice thành một mảng
- 24. Làm thế nào để chuyển đổi một số nguyên thành một mảng trong PHP?
- 25. Làm thế nào để chuyển đổi một mảng float thành một byte [] và ngược lại?
- 26. Làm thế nào để chuyển đổi một bộ python thành một mảng numpy?
- 27. Làm thế nào để chuyển đổi một mảng byte thành đôi trong C?
- 28. Chuyển đổi LocalTime (Java 8) thành Ngày
- 29. Làm thế nào để chuyển đổi một chuỗi UTF-8 thành Unicode?
- 30. Làm thế nào để chuyển đổi một tệp thành utf-8 bằng Python?
Tôi khuyên bạn nên hoàn nguyên quá trình quay lại vì câu hỏi đã hoàn chỉnh hơn và cho thấy bạn đã thử một cái gì đó. – skiwi
@skiwi Cảm ơn! nhưng tôi nghĩ rằng mã cố gắng không thực sự thêm thông tin cho câu hỏi, và không ai đã hét lên "cho chúng tôi thấy nỗ lực của bạn" chưa =) –
@skiwi: Mặc dù tôi thường hét vào bài tập của tôi-thay-cho-tôi câu hỏi, câu hỏi cụ thể này dường như rõ ràng hơn với tôi mà không có thêm bất kỳ sự lộn xộn nào. Hãy giữ nó gọn gàng. –