2 回答

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個(gè)贊
我認(rèn)為,您不想為每個(gè)排序順序創(chuàng)建一個(gè)單獨(dú)的類。但它不像你嘗試的那樣工作。我認(rèn)為, Comparator 是一個(gè)類型為 List 的變量。也許你應(yīng)該嘗試這樣的事情:
comparator.sort(comparing(c -> c.referencia));
System.out.println("\nOrdenado por Referencia");
comparator.forEach(System.out::println);
這里的“比較”方法是從 Java 類庫(kù)的類型 Comparator 靜態(tài)導(dǎo)入的。這使您無(wú)需新命名的頂級(jí)類即可成為新的比較器。
您應(yīng)該以小寫字母開(kāi)頭變量名(此處:Comparator)。這是 Java 中的通用約定。

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊
Comparator您可以創(chuàng)建多個(gè)進(jìn)行比較的方法,而不是創(chuàng)建多個(gè)實(shí)現(xiàn)接口的類。然后,方法本身基本上是(!) 的實(shí)現(xiàn)Comparator,您可以Collections#sort使用方法引用將其傳遞給方法。
根據(jù)比較實(shí)際發(fā)生的方式,更簡(jiǎn)潔的形式是使用這些Comparator#comparing方法,正如Donat 在他的回答 (+1) 中提到的那樣。具體來(lái)說(shuō),您可以comparingInt在示例中使用。此處顯示了兩種方法:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class MultipleCompareMethods
{
public static void main(String[] args)
{
List<Costos> list = new ArrayList<Costos>();
list.add(new Costos(1,3));
list.add(new Costos(4,5));
list.add(new Costos(2,7));
// Using Method references
Collections.sort(list, MultipleCompareMethods::compareByReferencia);
System.out.println("\nOrdenado por Referencia");
for (int i = 0; i < list.size(); i++)
System.out.println(list.get(i));
Collections.sort(list, MultipleCompareMethods::compareByMonto);
System.out.println("\nOrdenado por Monto");
for (int i = 0; i < list.size(); i++)
System.out.println(list.get(i));
// Using Comparator#comparingInt:
Collections.sort(list, Comparator.comparingInt(c -> c.referencia));
System.out.println("\nOrdenado por Referencia");
for (int i = 0; i < list.size(); i++)
System.out.println(list.get(i));
Collections.sort(list, Comparator.comparingInt(c -> c.monto));
System.out.println("\nOrdenado por Monto");
for (int i = 0; i < list.size(); i++)
System.out.println(list.get(i));
}
static int compareByReferencia(Costos c0, Costos c1)
{
return Integer.compare(c0.referencia, c1.referencia);
}
static int compareByMonto(Costos c0, Costos c1)
{
return Integer.compare(c0.monto, c1.monto);
}
}
class Costos
{
int referencia;
int monto;
Costos(int referencia, int monto)
{
this.referencia = referencia;
this.monto = monto;
}
@Override
public String toString()
{
return "COSTOS [referencia=" + referencia + ", monto=" + monto + "]";
}
}
class Costos
{
int referencia;
int monto;
Costos(int referencia, int monto)
{
this.referencia = referencia;
this.monto = monto;
}
@Override
public String toString()
{
return "COSTOS [referencia=" + referencia + ", monto=" + monto + "]";
}
}
如果你getReferencia在你的類中提供了方法,這可以更簡(jiǎn)潔地完成,再次使用方法引用:
Collections.sort(list, Comparator.comparingInt(Costos::getReferencia));
(從 Java 8 開(kāi)始,幾乎不需要實(shí)際實(shí)現(xiàn)自己的比較器類......)
添加回答
舉報(bào)