SORU
14 Temmuz 2013, Pazar


Sıkıştırma akarsu lambda ile JDK8 kullanarak (java.util.stream.Streams.zip)

Lambda b93 ile İLGİLENİYORUZ 8 ders akışı (bu öğretici Exploring Java8 Lambdas. Part 1 by Dhananjay Nene gösterilmiştir) (posta için kullanılabilecek java.util.stream.Streams.zip in b93. Bu fonksiyonu

Bu kimin tembel ve sıralı kombine bir Akış oluşturur iki dere unsurları birleştirme sonucu.

Ancak b98 bu kayboldu. Infact Streams sınıfı bile java.util.stream in b98 erişilebilir değil.

İşlevsellik taşındı, ve nasıl akışları kısaca b98 kullanarak posta mı yani bu?

Aklımdaki uygulama zip işlevi yerine nerede in this java implementation of Shen,

  • static <T> boolean every(Collection<T> c1, Collection<T> c2, BiPredicate<T, T> pred)
  • static <T> T find(Collection<T> c1, Collection<T> c2, BiPredicate<T, T> pred)

oldukça ayrıntılı bir kod ile fonksiyonları b98 işlevini kullanmaz.

CEVAP
7 Mayıs 2014, ÇARŞAMBA


Ben sadece b93 kaynak kodu aldı ve bir "sınıf. açıklama koymak bu kadar da ihtiyacım vardı Bunu biraz değiştirmek için geçerli API ile çalışmak zorunda kaldım.

Çalışma kodu örnek olması açısından, buraya (kendi sorumluluğunuzdadır...):

public static<A, B, C> Stream<C> zip(Stream<? extends A> a,
                                     Stream<? extends B> b,
                                     BiFunction<? super A, ? super B, ? extends C> zipper) {
    Objects.requireNonNull(zipper);
    @SuppressWarnings("unchecked")
    Spliterator<A> aSpliterator = (Spliterator<A>) Objects.requireNonNull(a).spliterator();
    @SuppressWarnings("unchecked")
    Spliterator<B> bSpliterator = (Spliterator<B>) Objects.requireNonNull(b).spliterator();

    // Zipping looses DISTINCT and SORTED characteristics
    int both = aSpliterator.characteristics() & bSpliterator.characteristics() &
            ~(Spliterator.DISTINCT | Spliterator.SORTED);
    int characteristics = both;

    long zipSize = ((characteristics & Spliterator.SIZED) != 0)
            ? Math.min(aSpliterator.getExactSizeIfKnown(), bSpliterator.getExactSizeIfKnown())
            : -1;

    Iterator<A> aIterator = Spliterators.iterator(aSpliterator);
    Iterator<B> bIterator = Spliterators.iterator(bSpliterator);
    Iterator<C> cIterator = new Iterator<C>() {
        @Override
        public boolean hasNext() {
            return aIterator.hasNext() && bIterator.hasNext();
        }

        @Override
        public C next() {
            return zipper.apply(aIterator.next(), bIterator.next());
        }
    };

    Spliterator<C> split = Spliterators.spliterator(cIterator, zipSize, characteristics);
    return (a.isParallel() || b.isParallel())
           ? StreamSupport.stream(split, true)
           : StreamSupport.stream(split, false);
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • circuschina

    circuschina

    16 Mart 2007
  • CMTelly

    CMTelly

    2 Mayıs 2007
  • kev5124

    kev5124

    9 Kasım 2008