Lettura del Java Tutorial by Oracle on interfaces che fornisce un esempio su Card
(Carte da gioco) Stavo cercando di capire lo default methods in interfaces. Ecco la link, sezione "Integrazione dei metodi predefiniti nelle interfacce esistenti". Ora nell'ultima sezione hanno ordinato le carte prima per livello e poi per seme. Sono state fornite le seguenti logiche. Si supponga che qualunque interfacce, funzioni o classi che vengono utilizzati sono stati definiti e sort
funzione richiede una logica Comparator
Catena di comparatori in java
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)));
Ora sto avendo alcuni problemi nella comprensione della seconda logica. Ho letto le interfacce di confronto e i nuovi metodi statici che sono stati inclusi in Java 1.8. Ora capisco qualcosa di simile a questo myDeck.sort(Comparator.comparing(Card::getRank))
che ordina per grado ma dopo aver letto the documentation for thenComparing
, non riesco a capire come thenComparing
restituisce un Comparator
che raggiunge la logica precedente 1. Costruisce internamente qualcosa come il costrutto if-else
come specificato in Logica 1?
Wh Prima possiamo controllare il codice sorgente di Oracle JDK? – AbKDs
Il mio IDE (IntelliJ) lo preme per me. Sul mio Mac è in: /Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/src.zip!/java/util/Comparator.java – RedDeckWins
@AbKDs, nel file src.zip all'interno dell'installazione di JDK . Oppure [online] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/java/util/Comparator.java#Comparator.thenComparing%28java.util.Comparator % 29). –