我刚接触Java,现在必须创建一些Comparator类。
在这个Stackoverflow页面上,我发现了一些有关使用lambda表达式的非常有用的信息。 How to compare objects by multiple fields
这让我想到创建这样的Compartor类:
public class WidthComparator implements Comparator{
@Override
public int compare(Object t, Object t1) {
Foto foto1 = (Foto)t;
Foto foto2 = (Foto)t1;
return Comparator.comparing(Foto::getWidth)
.thenComparing(Foto::getHeight)
.thenComparingInt(Foto::getName);
}
}
}
因此,当我有一个名为fotosCollection的集合时,我希望能够做到这一点:
fotosCollection.sort(new HoogteComparator());
这显然行不通,但是我如何才能使它正常工作?
附言我必须使用Comparator类。
最佳答案
如果您确实出于某种原因不希望比较器类型为匿名,则可以执行以下操作:
public class WidthComparator implements Comparator<Foto>{
private final static Comparator<Foto> FOTO_COMPARATOR = Comparator.comparing(Foto::getWidth)
.thenComparing(Foto::getHeight)
.thenComparingInt(Foto::getName);
@Override
public int compare(Foto foto1, Foto foto2) {
return FOTO_COMPARATOR.compare(foto1, foto2);
}
}
我也将考虑避免使用rawtype,而是像上面一样实现
Comparator<Foto>
。