如何在Java中的Comparator类中使用lambda表达式

Joh*_*eer 4 java lambda comparator java-8

我是Java的新手,现在我必须创建一些Comparator类.

在这个Stackoverflow页面上,我发现了一些关于使用lambda表达式的非常有用的信息.如何通过多个字段比较对象

这让我有关创建这样的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);
        }
    }    
}
Run Code Online (Sandbox Code Playgroud)

所以当我有一个名为fotosCollection的集合时,我希望能够这样做:

fotosCollection.sort(new HoogteComparator());
Run Code Online (Sandbox Code Playgroud)

这显然不起作用,但我怎么能让它工作?

PS.我必须使用Comparator类.

Mur*_*nik 5

Comparator.comapring返回Comparator- 您可以直接使用它:

// Define a "constant" comparator
private static final Comparator<Foo> HOOGTE_COMPARATOR = 
    Comparator.comparing(Foto::getWidth)
              .thenComparing(Foto::getHeight)
              .thenComparingInt(Foto::getName);

// Use it elsewhere in your code
fotosCollection.sort(HOOGTE_COMPARATOR);
Run Code Online (Sandbox Code Playgroud)

  • @JohanVergeer但这**是**比较器.您使用工厂方法生成它而不是自己编写样板代码的事实不会改变这一点. (3认同)