public class Test {
public static void main(String[] args) {
List<Pair<String, Integer>> list = new ArrayList<>();
list.add(new Pair<>("1", 8));
list.add(new Pair<>("3", 2));
list.add(new Pair<>("2", 15));
list.stream()
.sorted(Comparator.comparingInt(p -> p.v))
.map(p -> p.k)
.forEach(System.out::println);
}
}
class Pair<K, V> {
K k;
V v;
public Pair(K k, V v) {
this.k = k;
this.v = v;
}
}
Ok, wie Sie verstanden dieser Code mein Paar Schlüssel aus dem niedrigsten Wert auf den höchsten zugehörigen druckt, damit ich die erwartete Ausgabe:Misunderstanding über Vergleicher in Java 8
So weit so gut. Nun wollte ich das Gegenteil tun, ich dachte, ich würde nur
list.stream()
.sorted(Comparator.comparingInt(p -> p.v).reversed())
.map(p -> p.k)
.forEach(System.out::println);
zu tun haben, aber ich bekomme einen Übersetzungsfehler:
v cannot be resolved or is not a field
So scheint es, wie comparingInt
ein Comparator<Object>
zurück. Warum es so? Sollte es nicht eine Comparator<Integer>
zurückgeben?
Diese sind beide reproduzierbar mit Eclipse Luna Version 1 und javac.
javac -version => 1.8.0
java -version => java version "1.8.0_25"
Oh auch frei fühlen Sie den Titel meiner Frage ändern Sie es zu allgemein finden, aber ich konnte die richtigen Begriffe
Es wird wahrscheinlich mit Comparator.reverseOrder funktionieren. – assylias
@assy lias Nun, wie würde ich das mit ReverseOrder erreichen? Es würde bedeuten, dass meine Paarobjekte bereits vergleichbar sind. – user2336315
Beantwortet hier: http://StackOverflow.com/Questions/25172595/Comparator-Reversed-Not-Compiles-Wusting-Lambda –