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

  • engineerguy

    engineerguy

    10 Ocak 2010
  • GoldgenieOfficial

    GoldgenieOff

    23 Temmuz 2009
  • bored before i even began

    bored before

    30 Mart 2009

İLGİLİ SORU / CEVAPLAR