ArrayNode # elementi restituisce un iteratore su di esso è elementi è possibile utilizzare che per creare un flusso (sfruttando StreamSupport). StreamSupport richiede uno Spliterator e per creare uno Spliterator da un Iterator puoi usare la classe Spliterators.
ArrayNode files = (ArrayNode) json.get("files");
Stream<JsonNode> elementStream = StreamSupport.stream(Spliterators
.spliteratorUnknownSize(files.elements(),
Spliterator.ORDERED),false);
cyclops-streams ha una classe StreamUtils ha un metodo statico che rende questo un po 'più pulito (io sono l'autore).
ArrayNode files = (ArrayNode) json.get("files");
Stream<JsonNode> elementStream = StreamUtils.stream(files.elements());
Tenendo conto @JB risposta di Nizet che ArrayNode è un iterabile con StreamUtils è possibile passare in ArrayNode e ottenere il flusso di nuovo direttamente.
Stream<JsonNode> elementStream = StreamUtils.stream((ArrayNode) json.get("files"));
fonte
2015-09-20 20:13:59
L'intero array verrà caricato in memoria? Credo che la risposta sia sì". Allora, qual è il punto di avere un flusso qui? –
@AndreyKarayvansky non si tratta di prestazioni ma dell'abilità di utilizzare i metodi 'Java 8 Stream API' per elaborare la raccolta' ArrayNode' in un "modo funzionale" (usando metodi come 'map',' filter', 'collect' ...) . – icl7126