2016-04-13 27 views
-1

gerçekleştirmek için akışları kullanma. Ben toplamak yerine sonunda bazı mantık çalıştırabilirsiniz nasıl mantık

someObjectList.streams().filter(test).filter(more tests).??? 

nasıl filtreleme sonra sonunda mantığı çalıştırmak gibi

for(SomeObject someObj : someObjectList){ 
     if (/*some test*/) { 
      if (/*more tests*/) { 
       // do logic like create new object with the filtered values and add to a list. 
      } 
     } 
    } 

Yapabileceğim.

sayesinde Ravi

+2

Mkay. Ve sen ne yapmak istersin? "Mantık yapmak" çok açıklayıcı değildir. – Tunaki

+1

'.filter (test) .filter (daha testleri) .forEach (someObj -> {})' –

+1

Neden sadece tamamen normal döngü kullanılmasın? – Boann

cevap

2

Bir seçenek nesnelerin listesini oluştururken ancak eğer collect

List<Result> results = list.stream() 
          .filter(/*some test*/) 
          .filter(/*more tests*/) 
          .map(x -> new Result(x)) // do logic like create new object 
          .collect(Collectors.toList()) // add to a list. 

Fonksiyonel programlama sonuçlarını ve ideal don dönmek fonksiyonlarını içeren kullanmalıdır, forEach kullanmaktır herhangi bir yan etkisi yoktur. Ancak ne zaman bir Runnable veya Consumer görüyorsanız, bunun sadece yan etkilere sahip olduğunu biliyorsunuzdur. IMHO bu hiç de basit bir alternatif olmadığı sürece gayet iyi. Bu durumda ancak, yerine forEach kullanmanın gerçekten collect(toList()) daha doğal/işlevsel bir çözümdür nerede bir liste dönen/oluşturarak olmak istiyorum.

+1

Değil aşağı seçmen, ama bu kadar çok * terminali * operasyonlar olduğunda size collect' 'üzerine yoğunlaşmışlar neden olduğunu tahmin ediyorum:' forEach', 'forEachOrdered',' toArray', 'reduce',' toplamak 'min',' max', 'say', 'anyMatch',' allMatch', 'noneMatch',' findFirst', 'findAny'. Heck, yapmamalısın olsa bile, sonlanmayan "peek" in "mantığı" bile yapabilirsin. – Andreas

+2

@Andreas: OP, "mantıksal" kod yorumunda açıkça “bir listeye ekleme” ifadesini kullandı, yani topla (Collectors.toList()) 'e işaret etmek haklı. Ve downvote nedeniyle eksik noktalı virgül değil, umut ... – Holger

+0

@Andreas özellikle yeni Nesneler istedi OP listesi ve bunu yapmanın Akış yolu eklemek toplamak 'a map' ile ve (ToList()) –

3

Çağrı .filter (...) ve daha sonra .map (...) hangi bazı başka nesneler içine testleri uygun ve someObjectList unsurlarını dönüştürebiliyorsa .Yaðlar (...). Veya koleksiyoncuları hiç kullanmak istemiyorsanız, dönüştürülmüş nesneleri .filter (...). Map (...). ForEach (...) dizinine ekleyin.