Tôi có một file văn bản như thế này:Cách tạo mảng hai chiều từ luồng trong Java 8?
ids.txt
1000
999
745
123
...
Tôi muốn đọc tập tin này và tải nó trong một mảng hai chiều. Tôi hy vọng sẽ có một mảng tương tự như hình dưới đây:
Object[][] data = new Object[][] { //
{ new Integer(1000) }, //
{ new Integer(999) }, //
{ new Integer(745) }, //
{ new Integer(123) }, //
...
};
Đây là mã tôi đã viết:
File idsFile = ... ;
try (Stream<String> idsStream = Files.lines(idsFile.toPath(), StandardCharsets.US_ASCII)) {
Object[][] ids = idsStream
.filter(s -> s.trim().length() > 0)
.toArray(size -> new Object[size][]);
// Process ids array here...
}
Khi chạy mã này, một ngoại lệ được nâng lên:
java.lang.ArrayStoreException: null
at java.lang.System.arraycopy(Native Method) ~[na:1.8.0_45]
at java.util.stream.SpinedBuffer.copyInto(Unknown Source) ~[na:1.8.0_45]
at java.util.stream.Nodes$SpinedNodeBuilder.copyInto(Unknown Source) ~[na:1.8.0_45]
at java.util.stream.SpinedBuffer.asArray(Unknown Source) ~[na:1.8.0_45]
at java.util.stream.Nodes$SpinedNodeBuilder.asArray(Unknown Source) ~[na:1.8.0_45]
at java.util.stream.ReferencePipeline.toArray(Unknown Source) ~[na:1.8.0_45]
...
Làm thế nào có thể giải quyết ngoại lệ này?
Tại sao 'mới Integer (1000) '? Và bạn muốn một '[] []' trong đó mảng bên trong luôn luôn có 'length == 1'? –
@BoristheSpider Các id được chuyển đến thư viện của bên thứ ba chỉ chấp nhận 'Object [] []' làm đầu vào. – Stephan