Quando il Closure
utilizzato da sort
ha due parametri, si comporta come un tradizionale Comparator
. Cioè, per ogni confronto effettuato durante l'ordinamento, tra due elementi a
e b
, lo restituisce un numero intero negativo, zero o un numero intero positivo poiché il primo argomento è inferiore, uguale o superiore al secondo .
Nel proprio scenario particolare, il confronto è il risultato dell'utilizzo di spaceship operator<=>
. In altre parole, si stanno effettivamente ordinando i propri elementi nell'ordine ascendente.
Ad esempio, se si dispone della lista [ 3, 2, 1 ]
, il risultato dell'utilizzo di tale tipo would be[ 1, 2, 3 ]
.
Così, m.sort{a,b -> a.value <=> b.value}
è approssimativamente l'equivalente di utilizzare la funzione seguente compare
:
int compare(a, b) {
if (a < b) {
return -1;
} else if (a > b) {
return 1;
} else {
return 0;
}
}
fonte
2012-09-25 00:29:23
Così, il 'a, b ->', semplicemente passa i valori 'a' e' B' al comparatore? – F21
@ F21: Sì, una specie di. È come una funzione che prende due parametri e viene utilizzata per ordinare in base al corpo della funzione che restituisce l'operatore dell'astronave. –
Ottima spiegazione! Saluti :) – F21