Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何组合多个比较器?_Java_Comparator - Fatal编程技术网

Java 如何组合多个比较器?

Java 如何组合多个比较器?,java,comparator,Java,Comparator,我在这里的第一个帖子问题,请温柔一点:) 我试图用Java创建一个比较器,它根据各种标准进行排序。主类是非常基本的,它有几个排序所基于的变量 例如,“Book”类,它具有: 页码 头衔 平均每页字数 以下是给我的“指令”: 编写一个ComplexComputer,它可以基于多个变量进行排序。设2名施工人员: 一个有两个参数 public ComplexComparator(Comparator<Book> x, Comparator<Book> y) publi

我在这里的第一个帖子问题,请温柔一点:)

我试图用Java创建一个比较器,它根据各种标准进行排序。主类是非常基本的,它有几个排序所基于的变量

例如,“Book”类,它具有:

  • 页码
  • 头衔
  • 平均每页字数
以下是给我的“指令”:

编写一个ComplexComputer,它可以基于多个变量进行排序。设2名施工人员:

一个有两个参数

 public ComplexComparator(Comparator<Book> x, Comparator<Book> y)
 public ComplexComparator(Comparator<Book> x, boolean h, Comparator<Book> y, boolean i)
公共ComplexComparator(比较器x、比较器y)
如果基于第一个参数,两项相等,则基于第二个参数进行排序

另一个有4个参数

 public ComplexComparator(Comparator<Book> x, Comparator<Book> y)
 public ComplexComparator(Comparator<Book> x, boolean h, Comparator<Book> y, boolean i)
public ComplexComparator(比较器x、布尔值h、比较器y、布尔值i)
如果逻辑变量为true,它将根据比较器按自然顺序对其进行排序,因此其工作原理与2参数构造函数相同。如果其中一个逻辑变量的值为假,它将颠倒自然顺序


就这样。我编写了简单的比较器,但我不知道如何处理这个。我不知道比较法应该是什么样子;或者即使我必须添加一些类变量。。。谢谢你的帮助

1。如何做

您可以在
ComplexComparator
类中添加
比较器
,只需检查构造函数中条件的不同可能性:

public class ComplexComparator implements Comparator<Book>{

    private Comparator<Book> comp;

    public ComplexComparator(Comparator<Book> x, Comparator<Book> y) {
        comp = x.thenComparing(y);
    }

    public ComplexComparator(Comparator<Book> x, boolean h, Comparator<Book> y, boolean i) {
        if (h && i) {
            comp = x.thenComparing(y);
        } else if (h) {
            comp = x.thenComparing(y.reversed());
        } else if (i) {
            comp = x.reversed().thenComparing(y);
        } else {
            comp = x.reversed().thenComparing(y.reversed());
        }
    }

    @Override
    public int compare(Book o1, Book o2) {
        return comp.compare(o1, o2);
    }
}

3。如何使用它


1。如何做

您可以在
ComplexComparator
类中添加
比较器
,只需检查构造函数中条件的不同可能性:

public class ComplexComparator implements Comparator<Book>{

    private Comparator<Book> comp;

    public ComplexComparator(Comparator<Book> x, Comparator<Book> y) {
        comp = x.thenComparing(y);
    }

    public ComplexComparator(Comparator<Book> x, boolean h, Comparator<Book> y, boolean i) {
        if (h && i) {
            comp = x.thenComparing(y);
        } else if (h) {
            comp = x.thenComparing(y.reversed());
        } else if (i) {
            comp = x.reversed().thenComparing(y);
        } else {
            comp = x.reversed().thenComparing(y.reversed());
        }
    }

    @Override
    public int compare(Book o1, Book o2) {
        return comp.compare(o1, o2);
    }
}

3。如何使用它


您可以共享
ComplexComparator
类吗?首先,我不明白。是否需要一个复杂的比较器,因为比较器可以通过
比较器链接。然后比较(…)
?听起来像“如果两个数据基于第一个参数相等,那么它将基于第二个参数进行排序”。所以基本上,
ComplexComparator
会包装一个
Comparator
链,再加上设置排序顺序?我真的没有什么可以分享的。我真的不知道这门课应该是什么样子。“公共类ComplexComparator implements Comparator”我必须按照上面的说明编写。@LuCio这不太可能是Java-8时代之前的赋值。不管怎样:实现这样一个比较器可以让您熟悉标准API和相关类。在通用性方面,实施仍然有一定的自由度,但确切的要求没有不必要地限制…:-/您可以共享
ComplexComparator
类吗?首先,我不明白。是否需要一个复杂的比较器,因为比较器可以通过
比较器链接。然后比较(…)
?听起来像“如果两个数据基于第一个参数相等,那么它将基于第二个参数进行排序”。所以基本上,
ComplexComparator
会包装一个
Comparator
链,再加上设置排序顺序?我真的没有什么可以分享的。我真的不知道这门课应该是什么样子。“公共类ComplexComparator implements Comparator”我必须按照上面的说明编写。@LuCio这不太可能是Java-8时代之前的赋值。不管怎样:实现这样一个比较器可以让您熟悉标准API和相关类。在通用性方面,实施仍然有一定的自由度,但确切的要求没有不必要地限制…:-/非常感谢!我可能想得有点过头了,看起来很合乎逻辑。再次感谢你!非常感谢!我可能想得有点过头了,看起来很合乎逻辑。再次感谢你!