आप को प्राप्त करने के लिए आप क्या डाले उपयोग करके इनलाइन चाहते सक्षम होना चाहिए:
Stream.of("ciao", "hola", "hello")
.map(((Function<String, Integer>) String::length).andThen(n -> n * 2))
वहाँ केवल संकलक के लिए 'प्रकार संकेत' हैं, इसलिए वे नहीं वास्तव में वस्तु 'डाली' करते हैं और एक वास्तविक कलाकारों के भूमि के ऊपर नहीं है।
वैकल्पिक रूप से, आप पठनीयता के लिए एक स्थानीय चर का उपयोग कर सकते हैं:
Function<String, Integer> fun = String::length
Stream.of("ciao", "hola", "hello")
.map(fun.andThen(n -> n * 2));
एक तीसरा रास्ता है कि अधिक संक्षिप्त हो सकता है एक उपयोगिता विधि के साथ है:
public static <T, X, U> Function<T, U> chain(Function<T, X> fun1, Function<X, U> fun2)
{
return fun1.andThen(fun2);
}
Stream.of("ciao", "hola", "hello")
.map(chain(String::length, n -> n * 2));
कृपया ध्यान दें कि यह परीक्षण नहीं किया गया है, इस प्रकार मुझे नहीं पता कि इस मामले में टाइप अनुमान सही तरीके से काम करता है या नहीं।
इनपुट और वांछित आउटपुट प्रदान करें, फिर आपको बताएगा कि जावा 8 स्ट्रीम के साथ कैसे कार्यान्वित किया जाए। – Alboz
यह स्ट्रीम एपीआई से संबंधित नहीं है, यह विधि संदर्भ – rascio
से संबंधित है। कैनोलिक समाधान '.map (s -> s.length() * 2)' है क्योंकि इसे तुरंत दोबारा जोड़ने के लिए इसे दो कार्यों के रूप में व्यक्त करने का कोई कारण नहीं है। यदि आपके पास पहले से मौजूद 'फ़ंक्शन' उदाहरण है या बाद में पुन: उपयोग के लिए उनमें से कम से कम एक को रखना चाहते हैं, तो समस्या तब मौजूद नहीं है जब आपके पास कोई ऑब्जेक्ट हो जिसे आप 'और फिर' या 'लिखें' पर आक्रमण कर सकते हैं। अन्य सभी मामलों में, जटिल होने का कोई कारण नहीं है। – Holger