Java-Strom: finden Sie ein element mit min - /max-Wert eines Attributs

Habe ich einen Strom von Objekten und ich möchte denjenigen finden, der zu einem maximalen Wert eines Attributs, das ist aufwendig zu berechnen.

Als ein bestimmtes einfaches Beispiel, sagen, wir haben eine Liste von strings an und wir wollen das coolste, da eine coolnessIndex Funktion.

Sollten die folgenden arbeiten:

String coolestString = stringList
        .stream()
        .max((s1, s2) -> Integer.compare(coolnessIndex(s1), coolnessIndex(s2)))
        .orElse(null);

Nun, es gibt zwei Probleme mit diesem. Den ersten, vorausgesetzt, die coolnessIndex ist aufwendig zu berechnen, dies wird wahrscheinlich nicht sehr effizient. Ich nehme an, die max - Methode verwenden müssen, die Komparator-immer wieder, die wiederum rufen die coolnessIndex wiederholt und am Ende wird es mehr als einmal aufgerufen werden für jede saite.

Zweiten, dass der Komparator führt zu Redundanz in den code. Ich würde viel lieber eine syntax wie diese:

String coolestString = stringList
        .stream()
        .maxByAttribute(s -> coolnessIndex(s))
        .orElse(null);

Aber ich habe nicht in der Lage zu finden, eine entsprechende Methode in der Stream API. Das überrascht mich, da die Suche nach min/max-durch ein Attribut scheint, wie ein gemeinsames Muster. Ich Frage mich, ob es einen besseren Weg, als mit dem Komparator (andere als eine for-Schleife).

InformationsquelleAutor der Frage Jan Pomikálek | 2016-04-21

Schreibe einen Kommentar