Java лямбда возвращая лямбду

Я пытаюсь сделать то, что кажется относительно простой вещью в новой стране функционального программирования 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

Ответы на вопрос(1)

Ваш ответ на вопрос