मैं ऐसा करने की कोशिश कर रहा हूं जो कार्यात्मक प्रोग्रामिंग की नई जेडीके 8 भूमि में अपेक्षाकृत मूल बात है लेकिन यह काम नहीं कर सकता है।जावा लैम्ब्डा एक लैम्ब्डा लौट रहा है
import java.util.*;
import java.util.concurrent.*;
import java.util.stream.*;
public class so1 {
public static void main() {
List<Number> l = new ArrayList<>(Arrays.asList(1, 2, 3));
List<Callable<Object>> checks = l.stream().
map(n -> (Callable<Object>)() -> {
System.out.println(n);
return null;
}).
collect(Collectors.toList());
}
}
यह नंबरों की सूची लेता है और है कि उन्हें प्रिंट कर सकते हैं कार्यों की एक सूची: मैं इस काम कर कोड है। हालांकि कॉल करने योग्य के लिए स्पष्ट कलाकार अनावश्यक लगता है। यह मुझे और IntelliJ के लिए प्रतीत होता है। और हम दोनों का मानना है कि यह भी काम करना चाहिए:
List<Callable<Object>> checks = l.stream().
map(n ->() -> {
System.out.println(n);
return null;
}).
collect(Collectors.toList());
हालांकि मैं कोई त्रुटि मिलती है:
so1.java:10: error: incompatible types: cannot infer type-variable(s) R
List<Callable<Object>> checks = l.stream().map(n ->() -> {System.out.println(n); return null;}).collect(Collectors.toList());
^
(argument mismatch; bad return type in lambda expression
Object is not a functional interface)
where R,T are type-variables:
R extends Object declared in method <R>map(Function<? super T,? extends R>)
T extends Object declared in interface Stream
1 error
कास्ट, 'मानचित्र (..)' के लिए एक स्पष्ट प्रकार तर्क तर्क पसंद करते हैं। 'l.stream()। <कॉल करने योग्य
संबंधित: http://stackoverflow.com/questions/24794924/generic-type-inference-not-working-with-method-Chain – assylias