Expresión lambda dentro de llamada de método en Java 8

Ayuda acabo de ver este trozo de código en un pequeño test para la OCA de Java y me ha dejado con muchas dudas. Ojalá alguien pueda explicarme que está pasando en ese fragmento de código y cuál sería la respuesta y por qué. Muchas gracias.

¿Cuál de las siguientes líneas se puede insertar en la línea 11 para imprimir verdadero? (elija todo lo que corresponda)

public static void main(String() args) {
   //INSERT CODE HERE
}
private static boolean test(Predicate<Integer> p){
   return p.test(5);
}

A. System.out.print.println(test(i -> i == 5));

B. System.out.print.println(test(i -> -i == 5;}));

C. System.out.print.println(test((i) -> i==5));

D. System.out.print.println(test((int i) -> i == 5);

E. System.out.print.println(test((int i) -> {return i == 5;}));

F. System.out.print.println(test((i) -> {return i == 5;}));