Konvertieren Stream IntStream

Habe ich das Gefühl, ich bin hier etwas fehlt. Ich fand mich dabei die folgenden

private static int getHighestValue(Map<Character, Integer> countMap) {
    return countMap.values().stream().mapToInt(Integer::intValue).max().getAsInt();
}

Mein problem ist mit den dummen Konvertierung von Stream zu IntStream über die mapToInt(Integer::intValue)

Gibt es eine bessere Weise zu tun, die Konvertierung? all dies ist zu vermeiden, mit max() aus Stream, erfordert die übergabe eines Comparator aber die Frage ist speziell auf die Konvertierung von Stream zu IntStream

  • Haben Sie sich überlegt mit max(Comparator.<Integer>naturalOrder())?
  • Und warum genau glaubst du, dass es dumm ist? Möchtest du wieder ein int, ist so dass .mapToInt() macht Sinn...
  • weil ich denke, dass ich bin verschwenden einen Anruf zu autobox die Werte, denen würde müssen O(n) Operationen. Ich hoffe, ich kann das streamen als ein IntStream direkt
  • Nein, da keine Werte in Collections oder Maps primitive; und Sie sind nicht die Boxen, sondern hier unboxing. Noch ist es nicht so teuer wie Sie denken. Ich habe einen echten use-case im Hinterkopf, aber es ist zu lange zu erklären, in einem einzigen Kommentar.
  • Nein, bist du nicht zu tun alle Boxen -- die Werte sind schon boxed, du bist unboxing (was Sie tun müssen, zu tun ist Vergleich). Du machst es richtig. Du bist nicht die Kalkulation selbst alle vermeidbaren Berechnung; wenn Sie Tat es in eine einfache alte Schleife, würden Sie noch tun, mindestens so viele unbox Operationen.
InformationsquelleAutor Hilikus | 2015-01-18
Schreibe einen Kommentar