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ÅŸ:

Nasıl bir Dizi için Java 8 Akışı Dönüş...
Nasıl bir dizi akışı oluşturabilir miy...
İş akışı istatistiksel analiz ve rapor...
HTTP Yoklama, Uzun Yoklama, HTTP Akışı...
Neden kontrol düzenli akışı gibi özel ...