2017-02-28 4 views
25

Collection सब कुछ के साथ स्पष्ट है, लेकिन क्या निम्नलिखित के बारे में:जावा ऑब्जेक्ट से स्ट्रीम बनाने का सबसे आसान तरीका?

एक count() विधि और एक getPart(int i) विधि के साथ एक object नहीं है। तो सभी वस्तुओं निकालने निम्नलिखित बॉयलरप्लेट कोड की ओर जाता है: () -> object.count() और (int i) -> object.getPart(i) एक स्ट्रीम बनाने के लिए:

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

वहाँ सिर्फ 2 उत्पादकों पारित करने के लिए किसी भी मानक तरीका है? इस तरह:

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

[यह सवाल] (http://stackoverflow.com/questions/30685623/how-to-implement-a-streamt-for-java) ऐसा लगता है, शायद यह – Moira

+2

मदद कर सकता है क्यों आप 'object.getParts()' नहीं बनाते हैं जो इसके बजाय 'भाग' की सूची वापस कर सकता है? क्योंकि आपके कोड से ऐसा लगता है कि 'ऑब्जेक्ट' में सभी पार्ट्स हैं। –

+3

क्योंकि कोई विधि 'getParts' नहीं है। :) – Cherry

उत्तर

41

इस प्रयास करें:

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

मुझे पता चला कि "मैं इस अजीब चीज़ से स्ट्रीम कैसे बना सकता हूं" के समाधान के कितने बार -प्रोबलेम एक 'इंटस्ट्रीम' समाधान था! : डी –

संबंधित मुद्दे