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

  • LevelUpTuts

    LevelUpTuts

    20 Ocak 2012
  • Rugiagialia

    Rugiagialia

    1 Ocak 2008
  • SomeOne Pro

    SomeOne Pro

    25 EKİM 2013

İLGİLİ SORU / CEVAPLAR