1 Temmuz 2014, Salı
Java8 Akışı Yineleyici
Kısa ve öz bir şekilde Stream
veya daha fazla Iterator
özellikle "stream
." iterator
görünümüne dönüştürmek için arıyorum
Performans için bir sebep, yeni bir liste yineleyici bir kopyasını önlemek için istiyorum:
Iterator<String> sourceIterator = Arrays.asList("A", "B", "C").iterator();
Collection<String> copyList = new ArrayList<String>();
sourceIterator.forEachRemaining(copyList::add);
Stream<String> targetStream = copyList.stream();
Yorumlarda bazı önerileri temelinde, da Stream.generate
denedim:
public static void main(String[] args) throws Exception {
Iterator<String> sourceIterator = Arrays.asList("A", "B", "C").iterator();
Stream<String> targetStream = Stream.generate(sourceIterator::next);
targetStream.forEach(System.out::println);
}
ama NoSuchElementException
hasNext
çağırma yok (beri)
Exception in thread "main" java.util.NoSuchElementException
at java.util.AbstractList$Itr.next(AbstractList.java:364)
at Main$$Lambda$1/1175962212.get(Unknown Source)
at java.util.stream.StreamSpliterators$InfiniteSupplyingSpliterator$OfRef.tryAdvance(StreamSpliterators.java:1351)
at java.util.Spliterator.forEachRemaining(Spliterator.java:326)
at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580)
at Main.main(Main.java:20)
StreamSupport
Collections
baktım ama bir şey bulamadım.
CEVAP
1 Temmuz 2014, Salı
Tek yönlü Yineleyici bir Spliterator oluşturmak ve stream için bir temel olarak kullanmak
Iterator<String> sourceIterator = Arrays.asList("A", "B", "C").iterator();
Stream<String> targetStream = StreamSupport.stream(
Spliterators.spliteratorUnknownSize(sourceIterator, Spliterator.ORDERED),
false);
Belki daha okunaklı bir alternatif bir İterable kullanmak ve bir Yineleyici bir İterable oluşturma İterable işlevsel bir arayüzü olduğu için Lambda ile çok kolay
Iterator<String> sourceIterator = Arrays.asList("A", "B", "C").iterator();
Iterable<String> iterable = () -> sourceIterator;
Stream<String> targetStream = StreamSupport.stream(iterable.spliterator(), false);
Bunu Paylaş:
Gıt üretim hazırlama iş akışı sunucu/...
Neden "saçma" OAuth2 akışı &...
Android bir Giriş akışı verimli bir şe...
Python yineleyici davranış ve sonraki(...
Java8 akarsu sıralı ve paralel yürütme...