Secuencias en Java, no puedo resolver este código

He encontrado el siguiente fragmento de código:

Function<Integer, Predicate<Integer>> smallerThan = x -> y -> y < x;
List<Integer> l = Arrays.asList(5, 6, 7, 23, 4, 5645,
    6, 1223, 44453, 60182, 2836, 23993, 1);

List<Integer> list2 = l.stream()
    .filter(smallerThan.apply(l.get(0)))
    .collect(Collectors.toList());

System.out.println(list2);

Como salida recibo:

[4, 1]

Cómo hace elsmallerThan funcionamos en este ejemplo de trabajo, considerando que solo pasamos un parámetrosmallerThan.apply(l.get(0))?

Respuestas a la pregunta(3)

Su respuesta a la pregunta