Вы можете попробовать этот код. Может быть полезно.

от вопрос уже есть ответ здесь:

Почему ссылка на метод Java с типом возврата соответствует интерфейсу потребителя? 2 ответа

Интерфейс Consumer для лямбда типаT -> void, но в следующем коде:

ЛямбдаBook::getName принимает тип:Book->StringЯ хотел бы спросить, почему он может выступать в качестве потребителя (аргумент List.forEach является потребителем).

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);

    }
}

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

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