2 回答
TA贡献1818条经验 获得超8个赞
我认为,您不想为每个排序顺序创建一个单独的类。但它不像你尝试的那样工作。我认为, Comparator 是一个类型为 List 的变量。也许你应该尝试这样的事情:
comparator.sort(comparing(c -> c.referencia));
System.out.println("\nOrdenado por Referencia");
comparator.forEach(System.out::println);
这里的“比较”方法是从 Java 类库的类型 Comparator 静态导入的。这使您无需新命名的顶级类即可成为新的比较器。
您应该以小写字母开头变量名(此处:Comparator)。这是 Java 中的通用约定。
TA贡献1859条经验 获得超6个赞
Comparator您可以创建多个进行比较的方法,而不是创建多个实现接口的类。然后,方法本身基本上是(!) 的实现Comparator,您可以Collections#sort使用方法引用将其传递给方法。
根据比较实际发生的方式,更简洁的形式是使用这些Comparator#comparing方法,正如Donat 在他的回答 (+1) 中提到的那样。具体来说,您可以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在你的类中提供了方法,这可以更简洁地完成,再次使用方法引用:
Collections.sort(list, Comparator.comparingInt(Costos::getReferencia));
(从 Java 8 开始,几乎不需要实际实现自己的比较器类......)
添加回答
举报