Consumer lambda en Java 8 [duplicado]

Esta pregunta ya tiene una respuesta aquí:

¿Por qué una referencia de método Java con tipo de retorno coincide con la interfaz del consumidor? 2 respuestas

La interfaz de consumidor es para lambda de tipoT -> void, pero en el siguiente código es:

El lambdaBook::getName toma el tipo:Book->String, Preguntaría por qué puede actuar como un consumidor (el argumento de List.forEach es Consumer).

class Book {
    private String name;

    public Book(String name) {
        this.name = name;
    }

    public String getName() {
        System.out.println(name);
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
public class BookTest {
    @Test
    public void testBook() {
        List<Book> books  = new ArrayList<>();
        books.add(new Book("A"));
        books.add(new Book("D"));
        books.add(new Book("C"));
        books.add(new Book("B"));

        Function<Book, String> function = Book::getName;
        books.forEach(Book::getName);

        //error here
        //books.forEach(function);

    }
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta