Java 类中的多个比较器

Java 类中的多个比较器,java,comparator,Java,Comparator,我被一个我找不到好答案的问题难住了。我找到了 ,但它是不完整的: 这应该行得通,但我不知道比较部分是如何工作的。这是我的班级: package ZVCVolkel_Logic; import java.util.Comparator; public class Vliegtuig implements Comparator<Vliegtuig>{ private String naam; private String type; private Stri

我被一个我找不到好答案的问题难住了。我找到了 ,但它是不完整的:

这应该行得通,但我不知道比较部分是如何工作的。这是我的班级:

package ZVCVolkel_Logic;

import java.util.Comparator;

public class Vliegtuig implements Comparator<Vliegtuig>{

    private String naam;
    private String type;
    private String status;

    private Hangaar hangaar;

    public Vliegtuig(String naam, String type, String status, Hangaar hangaar){
        this.naam = naam;
        this.type = type;
        this.status = status;
        this.hangaar = hangaar;
    }
}
现在我需要一个状态和Hangaar.getName的比较器。有人能帮忙吗


这不是一个,他只有一个比较。我也可以做到这一点,但不能在一个类中使用两个不同的对象。

comparator接口有一个方法compare返回一个int值来确定两个对象之间的关系

它将返回:

作为第一个参数的负整数、零或正整数小于、等于或大于第二个参数


在比较器实现中,需要比较两个对象。例如,您可以参考大多数JDK类,例如java.lang.Integer

在您的情况下,解决方案是使用来自以下对象的嵌入式压缩程序:

Comparator<Vliegtuig> nameComparator = new Comparator<>() {
    @Override
    public int compare(Vliegtuig o1, Vliegtuig o2) {
        return o1.getName().compareTo(o2.getName());
    }
}

您不需要通过Vliegtuig扩展Comparator。

问题是?您读过文档了吗?比较定义得很好。我怎样才能为status和Hangaar.getname创建一个比较器呢?另外,您的类Vliegtuig可能应该实现Comparable而不是Comparator@Code-学徒我不认为这能解决OP的问题OP需要两个比较器,而不是一个比较器。所以我得到了一个Vliegtuigs“vliegtuigen”列表。是吗?;Collections.sortvliegtuigen,hangaarNameComparator?使用“hangaarNameComparator”显示代码。我猜你说的不对@MrEmper不知道如何应用这个,但它确实让我的错误更清楚了
static Comparator<Vliegtuig> hangaarNameComparator() {
    return new Comparator<Vliegtuig>(){
              public int compare(Vliegtuig one, Vliegtuig two) {
                 return one.getHangaar().getName().compareTo(two.getHangaar().getName());
              }
           }
}
Comparator<Vliegtuig> hangaarNameComparator = Comparator.comparing(Vliegtuig::getHagaar, 
                            Comparator.comparing(Hagaar::getName));
Comparator<Vliegtuig> nameComparator = new Comparator<>() {
    @Override
    public int compare(Vliegtuig o1, Vliegtuig o2) {
        return o1.getName().compareTo(o2.getName());
    }
}