Я пытаюсь сделать то, что кажется относительно базовой в новой области программирования jdk8 функционального программирования, но не может заставить его работать. У меня есть этот рабочий код:
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());
   }
}
Он принимает список чисел и создает список функций, которые могут распечатывать их. Однако явное приведение к Callable кажется излишним. Мне кажется, и 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