Sto scrivendo un metodo che accetta un input Map
del modulo Map<Term, List<Integer>>
in cui è definito un Term
here.Java 8 - Elenco filtri all'interno del valore della mappa
Metodo:
- andare oltre le chiavi del
Map
e filtrare utilizzando un attributoTerm
. - Per ognuno dei tasti rimanenti, ottenere la dimensione della lista corrispondente, cap a 5 (
min(List.size(), 5)
) e aggiungere l'uscita di una var globale (ad esempio,totalSum
) - ritorno
totalSum
Questo è quello che ho scritto finora:
inputMap
.entrySet()
.stream()
.filter(entry -> entry.getKey().field().equals(fieldName)) // Keep only terms with fieldName
.forEach(entry -> entry.getValue()
.map(size -> Math.min(entry.getValue().size(), 5))) // These 2 lines do not work
.sum();
non sono in grado di prendere in input un flusso di liste, in uscita un numero intero per ciascuno di tali elenchi e restituire la somma di tutte le uscite.
posso, ovviamente, scrivere utilizzando cicli for, ma sto cercando di imparare Java 8 ed era curioso di sapere se questo problema è risolvibile utilizzarlo.
L'interfaccia 'Map' ha ora il metodo proprio' forEach() 'che prende un'istanza' BiConsumer'. Questo può essere usato per semplificare il tuo codice. –