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

  • 8lacKy

    8lacKy

    30 Mart 2009
  • Bogdan Gabriel

    Bogdan Gabri

    5 Aralık 2006
  • FILIPeeeK

    FILIPeeeK

    22 Mayıs 2006

İLGİLİ SORU / CEVAPLAR