Ho un file di testo come questo:Come creare un array bidimensionale da uno stream in Java 8?
ids.txt
1000
999
745
123
...
voglio leggere questo file e caricarlo in un array bidimensionale. Mi aspetto di avere una matrice simile a quella riportata di seguito:
Object[][] data = new Object[][] { //
{ new Integer(1000) }, //
{ new Integer(999) }, //
{ new Integer(745) }, //
{ new Integer(123) }, //
...
};
Ecco il codice che ho scritto:
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...
}
Quando si esegue questo codice, viene sollevata un'eccezione:
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]
...
Come può risolvere questa eccezione?
Perché 'new Integer (1000)'? E vuoi un '[] []' dove l'array interno ha sempre 'length == 1'? –
@BoristheSpider Gli ID vengono passati a una libreria di terze parti che accetta solo 'Object [] []' come input. – Stephan