Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.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/8/file/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 如何实现基于多个比较器的排序列表add();参数化比较器?_Java_Insert_Comparator - Fatal编程技术网

Java 如何实现基于多个比较器的排序列表add();参数化比较器?

Java 如何实现基于多个比较器的排序列表add();参数化比较器?,java,insert,comparator,Java,Insert,Comparator,我需要实现以下功能。我愿意使用最好的类,但我不确定是应该使用SortedSet还是TreeSet(如Set-myEmailsAscending=new-TreeSet(new-DateAscendingComparator());//电子邮件总是按升序排列) 这是选择comparator的正确语法吗? 我希望避免创建多个Comparator类,那么有没有办法做到这一点?有几个问题: 您应该使用equals()进行字符串比较,而不是= new的用法是错误的。我建议如下: Comparator co

我需要实现以下功能。我愿意使用最好的类,但我不确定是应该使用SortedSet还是TreeSet(如Set-myEmailsAscending=new-TreeSet(new-DateAscendingComparator());//电子邮件总是按升序排列)

这是选择comparator的正确语法吗?
我希望避免创建多个Comparator类,那么有没有办法做到这一点?

有几个问题:

您应该使用
equals()
进行字符串比较,而不是
=

new
的用法是错误的。我建议如下:

Comparator comp;
if (getCurrentSortingMethod().equals("DateDescending")) {
   comp = new DateDescendingComparator();
} else if (getCurrentSortingMethod().equals("DateAscending")) {
   comp = new DateAscendingComparator();
} ...

int index = Collections.binarySearch(getEmails(), email, comp);
注意
新的
是如何在
if
块中移动的


作为所有这些的替代方案,您可以使用带有适当比较器的。集合将自动按正确顺序排序。

在类构造函数中接受比较器和/或为其提供setter。 然后只需使用
addEmail(电子邮件)
中的比较器即可。如果未设置比较器,则使用自然排序


看看它是如何处理比较器和自然排序的。尝试根据您自己的列表实现对其进行调整。

为什么不只使用树集,它将为您做所有事情?设置myEmailsAscending=new TreeSet(new DateAscendingComparator());//电子邮件总是以升序排列,但我以后如何更改一组电子邮件的顺序?这将如何影响这个函数add()?当用户切换时,可以将一个集合的内容转储到另一个集合中。或者两者都保留,插入其中,记住哪一个代表“当前”排序。我愿意使用最好的类,但我不确定是否应该使用SortedSet或TreeSet(如上在Set myEmailsAscending=new TreeSet中所述)。
TreeSet
is-a
SortedSet
。后者是一个接口,前者是一个具体的实现。但我以后如何更改一组电子邮件的顺序呢?这将如何影响这个函数add()?原型不会被改变。
Comparator comp;
if (getCurrentSortingMethod().equals("DateDescending")) {
   comp = new DateDescendingComparator();
} else if (getCurrentSortingMethod().equals("DateAscending")) {
   comp = new DateAscendingComparator();
} ...

int index = Collections.binarySearch(getEmails(), email, comp);