gpt4 book ai didi

java - 如何组合多个Comparator?

转载 作者:行者123 更新时间:2023-12-01 17:49:54 25 4
gpt4 key购买 nike

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

我正在尝试用 Java 创建一个根据各种标准进行排序的比较器。 Main 类非常基础,它有几个排序所依据的变量。

例如,“Book”类,其中包含:

  • 页码,
  • 标题,
  • 每页平均字数。

以下是我收到的“说明”:

编写一个ComplexComperator,它可以根据多个变量进行排序。创建 2 个构造函数:

一个有 2 个参数

 public ComplexComparator(Comparator<Book> x, Comparator<Book> y)

如果根据第一个参数两个项目相等,则根据第二个参数排序,

另一个有 4 个参数

 public ComplexComparator(Comparator<Book> x, boolean h, Comparator<Book> y, boolean i)

如果逻辑变量为 true,它会根据该比较器按自然顺序对其进行排序 - 因此它的工作方式与 2 参数构造函数相同。如果其中一个逻辑变量取假值,它将颠倒自然顺序。

所以,就是这样。我写了简单的比较器,但我不知道如何处理这个。我不知道比较方法应该是什么样子;或者即使我必须添加某种类变量...谢谢您的帮助!

最佳答案

<强>1。怎么做

您可以添加Comparator<Book>在你的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);
}
}
<小时/>

<强>2。如何创建它

如果您有正确的getters您可以用作

public static void main(String[] args) {
Comparator<Book> page = Comparator.comparing(Book::getPageNb);
Comparator<Book> title = Comparator.comparing(Book::getTitle);

ComplexComparator c1 = new ComplexComparator(page, title);
ComplexComparator c2 = new ComplexComparator(page, true, title, false);
}
<小时/>

<强>3。如何使用

Full Workable Demo

关于java - 如何组合多个Comparator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51505777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com