ArrayNode # elementy zwraca iterator na to elementy można używać, aby stworzyć strumień (wykorzystując StreamSupport). StreamSupport wymaga Spliteratora, a do stworzenia Spliteratora z Iteratora możesz użyć klasy Spliterators.
ArrayNode files = (ArrayNode) json.get("files");
Stream<JsonNode> elementStream = StreamSupport.stream(Spliterators
.spliteratorUnknownSize(files.elements(),
Spliterator.ORDERED),false);
cyclops-streams ma klasę StreamUtils ma statyczną metodę, która sprawia, że ten nieco czystsze (jestem autorem).
ArrayNode files = (ArrayNode) json.get("files");
Stream<JsonNode> elementStream = StreamUtils.stream(files.elements());
Uwzględniając @JB odpowiedź Nizet że ArrayNode jest iterable z StreamUtils można przekazać w ArrayNode i dostać z powrotem bezpośrednio Stream.
Stream<JsonNode> elementStream = StreamUtils.stream((ArrayNode) json.get("files"));
Czy cała tablica zostanie załadowana do pamięci? Uważam, że odpowiedź brzmi "tak". Więc jaki jest sens posiadania strumienia? –
@AndreyKarayvansky nie chodzi o wydajność, ale o możliwość korzystania z metod 'Java 8 Stream API' do przetwarzania kolekcji' ArrayNode' w "funkcjonalny sposób" (używając takich metod jak 'map',' filter', 'collect' ...) . – icl7126