我刚接触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>

09-11 17:29