Lesen der Java Tutorial by Oracle on interfaces, die ein Beispiel gibt auf Card
(Spielkarten) Ich habe versucht, die default methods in interfaces zu verstehen. Hier ist die link, Abschnitt "Integration von Standardmethoden in bestehende Schnittstellen". Im letzten Abschnitt sortierten sie die Karten zuerst nach Rang und dann nach Anzügen. Folgende Logiken wurden angegeben. Nehmen wir an, was auch immer Schnittstellen, Funktionen oder Klassen, die verwendet werden, definiert und sort
Funktion nimmt einen Comparator
Kette von Komparatoren in Java
Logik 1:
package defaultmethods;
import java.util.*;
import java.util.stream.*;
import java.lang.*;
public class SortByRankThenSuit implements Comparator<Card> {
public int compare(Card firstCard, Card secondCard) {
int compVal =
firstCard.getRank().value() - secondCard.getRank().value();
if (compVal != 0)
return compVal;
else
return firstCard.getSuit().value() - secondCard.getSuit().value();
}
}
Logic 2:
myDeck.sort(
Comparator
.comparing(Card::getRank)
.thenComparing(Comparator.comparing(Card::getSuit)));
Jetzt habe ich einige Probleme habe im Verständnis der zweiten Logik. Ich lese die Komparator-Schnittstellen und die neuen statischen Methoden, die in Java 1.8 enthalten sind. Jetzt verstehe ich etwas wie diese myDeck.sort(Comparator.comparing(Card::getRank))
die nach Rang sortiert, aber nach dem Lesen the documentation for thenComparing
, kann ich nicht verstehen, wie thenComparing
eine Comparator
zurückgibt, die die obige Logik erreicht 1. Baut es intern etwas wie die if-else
Konstrukt wie in Logic 1 angegeben?
Wh Können wir den Quellcode von Oracle JDK überprüfen? – AbKDs
Meine IDE (IntelliJ) zieht es für mich ein. Auf meinem Mac befindet es sich in: /Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/src.zip!/java/util/Comparator.java – RedDeckWins
@AbKDs, in der Datei src.zip in Ihrer JDK-Installation . Oder [online] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/java/util/Comparator.java#Comparator.thenComparing%28java.util.Comparator % 29). –