Encontre a diferença entre duas coleções no Java 8?

Estou tentando fazer umaList de todos os livros em umCollection que não estão presentes em outro. Meu problema é que eu preciso comparar com base no ID do livro, então não posso apenas testar se um livro no primeiro está contido no segundo, tenho que determinar se algum livro da segunda coleção tem o mesmo ID que um livro no primeiro.

Eu tenho o código abaixo para comparar duas coleções de livros e filtrar a primeira coleção:

List<Book> parentBooks = listOfBooks1.stream().filter(book->
  !listOfBooks2.contains(book)).collect(Collectors.toList());

O código não funciona corretamente porque estou comparando os próprios objetos. Preciso comparar os objetos com base no bookId em vez do objeto inteiro do livro. Como devo alterar o código para que ele possa fazer a comparação com base no bookId (book.getId ())?

questionAnswers(1)

yourAnswerToTheQuestion