Ich schreibe eine Methode, die eine Eingabe Map
der Form Map<Term, List<Integer>>
nimmt, wobei Term
definiert ist here.Java 8 - Filterliste im Kartenwert
Methode:
- Go über die Tasten des
Map
und filtern sie einTerm
Attribut. - Für jede der übrigen Tasten, um die Größe der entsprechenden Liste, die Kappe auf 5 (
min(List.size(), 5)
) und die Ausgabe in eine globale var hinzufügen (sagen wir,totalSum
) - Return
totalSum
Diese so weit ist das, was ich geschrieben habe:
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();
ich bin nicht in der Lage als Eingabe einen Strom von Listen zu nehmen, Ausgabe eine ganze Zahl für jede dieser Listen und gibt die Summe aller Ausgänge.
Ich kann es natürlich mit for-Schleifen schreiben, aber ich versuche Java 8 zu lernen und war neugierig, ob dieses Problem lösbar ist.
Die 'Map'-Schnittstelle hat jetzt ihre eigene 'forEach()' - Methode, die eine 'BiConsumer'-Instanz verwendet. Dies kann verwendet werden, um Ihren Code zu vereinfachen. –