Przeczytanie Java Tutorial by Oracle on interfaces, który daje przykład na Card
(karty do gry) Próbowałem zrozumieć default methods in interfaces. Oto sekcja link "Integrowanie domyślnych metod w istniejących interfejsach". Teraz w ostatniej sekcji posortowali karty według rangi, a następnie według kolorów. Podano następujące logiki. Załóżmy, że cokolwiek interfejsy, funkcje lub klasy, które są użyte zostały zdefiniowane i sort
funkcja przyjmuje Comparator
Łańcuch komparatorów w java
Logic 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)));
Teraz mam pewne problemy w zrozumieniu drugiej logiki. Przeczytałem interfejsy komparatora i nowe metody statyczne, które zostały zawarte w Java 1.8. Teraz rozumiem coś takiego myDeck.sort(Comparator.comparing(Card::getRank))
który sortuje według rangi, ale po przeczytaniu the documentation for thenComparing
, nie jestem w stanie zrozumieć, jak thenComparing
zwraca Comparator
który spełnia powyższe Logic 1. Czy wewnętrznie zbudować coś jak if-else
konstruktu, jak określono w Logic 1?
Wh Czy możemy sprawdzić kod źródłowy Oracle JDK? – AbKDs
My IDE (IntelliJ) ściąga to dla mnie. Na moim Macu jest to: /Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/src.zip!/java/util/Comparator.java – RedDeckWins
@AbKDs, w pliku src.zip wewnątrz instalacji JDK . Lub [online] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/java/util/Comparator.java#Comparator.thenComparing%28java.util.Comparator % 29). –