Quote Originariamente inviata da fermat Visualizza il messaggio
- dovrei raggruppare sia per getAuthor, che per getEditor (in punti diversi del programma), ma non saprei come indicare per cosa ragguppare
Quindi author E editor come "chiave composta" per la classificazione applicata dal groupingBy?
Allora dovresti fare una classe che rappresenta l'insieme di author E editor.

Quote Originariamente inviata da fermat Visualizza il messaggio
se volessi generalizzare la lista, sarebbe possibile (List<Book>)? me lo chiedo perchè mi viene in mente che se lo generalizzo per List<T>, ovviamente poi non ha accesso diretto ai metodi getAuthor e getEditor, quindi come si può generalizzare la lista? (penso che questa domanda si indirettamente collegata alla prima....).
Innanzitutto consiglio: separa la lettura/parsing da JSON da altre logiche di analisi/raggruppamenti.

Quindi un metodo es.

public List<Book> readBooksJson(File file) throws IOException

(il TypeToken lo puoi fare all'interno o tenerlo come campo static final, dato che sostanzialmente è una "costante").

e poi es.

public Map<String,Long> countBooksByAuthor(List<Book> booksList)