2017-02-28 14 views
25

aşağıdaki açıkça gösterir, ama ne:Bir Java nesnesinden akış oluşturmanın en kolay yolu? <code>Collection</code> herşeyle

bir count() yöntem ve bir getPart(int i) yöntemle bir object yoktur. Bu nedenle tüm nesneleri ayıklanması aşağıdaki Demirbaş kodu yol açar: () -> object.count() ve (int i) -> object.getPart(i) akışı oluşturmak için:

List<Part> result = new ArrayList<Part>(); 
for (int i = 0, i < object.count(), i++) { 
    result.add(object.getPart(i));   
} 
return result.stream(); 

sadece 2 üreticiyi geçmesine herhangi bir standart yolu var mı? Şunun gibi:

SomeUtil.stream(object::count, object::getPart); 
+0

[Bu soru] (http://stackoverflow.com/questions/30685623/how-to-implement-a-streamt-for-java) Benzer gibi, belki de yardımcı olabilir – Moira

+2

Neden 'object' listesinin yerine dönebilen 'object.getParts()' oluşturmuyorsunuz? Çünkü kodunuzdan, 'nesnenin' tüm parçalara sahip olduğu görülüyor. –

+3

Çünkü getParts yöntemi yok. :) – Cherry

cevap

41

bu deneyin:

IntStream.range(0, object.count()).mapToObj(object::getPart); 
+4

"Bu garip şeyden nasıl bir akım oluşturabilirim" çözümünün kaç kez olduğunu anladım - problem bir "IntStream" çözümüydi! : D –