SORU
31 AĞUSTOS 2013, CUMARTESİ


Kısa ve öz bir şekilde Java 8'de endeksleri ile bir dere üzerinde yineleme var mı?

Kısa ve öz bir şekilde stream ederken akışında dizin erişimi olan üzerinde yineleme var mı?

Şu ana kadar (challenge 2 here) karşılaştığım en iyisidir

String[] names = {"Sam","Pamela", "Dave", "Pascal", "Erik"};

List<String> nameList;
Stream<Integer> indices = intRange(1, names.length).boxed();
nameList = zip(indices, stream(names), SimpleEntry::new)
        .filter(e -> e.getValue().length() <= e.getKey())
        .map(Entry::getValue)
        .collect(toList());

SERİ örnek göz önüne alındığında kıyasla oldukça hayal kırıklığı gibi görünüyor

string[] names = { "Sam", "Pamela", "Dave", "Pascal", "Erik" };
var nameList = names.Where((c, index) => c.Length <= index   1).ToList();

Daha kısa bir yolu var mı?

Ayrıca zip veya kaldırılmış taşındı sanırım

CEVAP
31 AĞUSTOS 2013, CUMARTESİ


En temiz yolu endeksleri akışı başlamak için:

String[] names = {"Sam", "Pamela", "Dave", "Pascal", "Erik"};
IntStream.range(0, names.length)
         .filter(i -> names[i].length() <= i)
         .mapToObj(i -> names[i])
         .collect(Collectors.toList());

Çıkan listede "Erik" sadece içerir.


Döngüler için kullanılan daha tanıdık olan bir alternatif geçici bir sayaç değişken bir nesne kullanarak korumak için, örneğin AtomicInteger: bir olurdu

String[] names = {"Sam", "Pamela", "Dave", "Pascal", "Erik"};
AtomicInteger index = new AtomicInteger();
List<String> list = Arrays.stream(names)
                          .filter(n -> n.length() <= index.incrementAndGet())
                          .collect(Collectors.toList());

Unutmayınparalel bir dere üzerinde ikinci yöntemi kullanarak öğeleri olmaz gibi kırılmasına neden olabilir necesarily işlenecek "sırada".

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BeginnersTech

    BeginnersTec

    8 NİSAN 2011
  • DigitalRev TV

    DigitalRev T

    30 AĞUSTOS 2007
  • TantalizingTrance

    TantalizingT

    15 ŞUBAT 2009

İLGİLİ SORU / CEVAPLAR