Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.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 集合排序基于实现Comparator的类的排序_Java_Compare_Comparator_Comparable_Compareto - Fatal编程技术网

Java 集合排序基于实现Comparator的类的排序

Java 集合排序基于实现Comparator的类的排序,java,compare,comparator,comparable,compareto,Java,Compare,Comparator,Comparable,Compareto,更具体地说,我对集合排序有问题 Output: [B_Author: Movie_X, A_Author: Movie_A, A_Author: Movie_B] Should Be: [A_Author: Movie_A, A_Author: Movie_B, B_Author: Movie_X] 应该这样做的方法(在类电影存储中): 我一直在查看StackOverflow和其他网站,但我注意到每个人都根据1个参数对其进行排序(这对我来说也不适用),同时,代码与我的代码几乎相同 提前感谢您的

更具体地说,我对集合排序有问题

Output:
[B_Author: Movie_X, A_Author: Movie_A, A_Author: Movie_B]
Should Be:
[A_Author: Movie_A, A_Author: Movie_B, B_Author: Movie_X]
应该这样做的方法(在类电影存储中):

我一直在查看StackOverflow和其他网站,但我注意到每个人都根据1个参数对其进行排序(这对我来说也不适用),同时,代码与我的代码几乎相同


提前感谢您的帮助:)

创建比较器的更简洁的方法:

比较器比较器= 比较(Movie::getName),然后比较(Movie::getAuthor); 设置电影=新树集(比较器); 电影。addAll(电影列表); 和
TreeSet
按排序顺序迭代

要添加到
电影
类:

公共静态类{
专用静态最终比较器比较器=
比较(Movie::getName),然后比较(Movie::getAuthor);
...
@凌驾
公共int比较(电影其他){
返回比较器。比较(这个,其他);
}
}
然后,
TreeSet
不需要指定比较器:

Set movies=新树集(movieList);

创建比较器的更简洁的方法:

比较器比较器= 比较(Movie::getName),然后比较(Movie::getAuthor); 设置电影=新树集(比较器); 电影。addAll(电影列表); 和
TreeSet
按排序顺序迭代

要添加到
电影
类:

公共静态类{
专用静态最终比较器比较器=
比较(Movie::getName),然后比较(Movie::getAuthor);
...
@凌驾
公共int比较(电影其他){
返回比较器。比较(这个,其他);
}
}
然后,
TreeSet
不需要指定比较器:

Set movies=新树集(movieList);

HashSet的文档对排序有何说明?这意味着HashSet不维护其元素的顺序。因此,哈希集的排序是不可能的。。。。这意味着我无法将其转换回set。。。我是这样一个巴卡罗。。。谢谢您可以将其作为答案发布,我将向上投票并检查是否正确。您还可以使用一个更为i18n的比较,使用一个排序器,而不是二进制字符比较。ÈÊEèEèE使用“字母顺序”排序方法可能不会很接近。还有其他类型的集合保留插入顺序。例如,Linkedhashset。
HashSet
的文档对排序有何说明?这意味着HashSet不维护其元素的顺序。因此,哈希集的排序是不可能的。。。。这意味着我无法将其转换回set。。。我是这样一个巴卡罗。。。谢谢您可以将其作为答案发布,我将向上投票并检查是否正确。您还可以使用一个更为i18n的比较,使用一个排序器,而不是二进制字符比较。ÈÊEèEèE使用“字母顺序”排序方法可能不会很接近。还有其他类型的集合保留插入顺序。比如Linkedhashset,你赢了我!我正要说最后一句话,你抢先说了!我正要说最后一句话。
public Set<Movie> getCatalogue(Comparator<Movie> comp){
        List<Movie> sett = new ArrayList<>(this.movieList);
        sett.sort(comp);
        return new HashSet<>(sett);
    }
public class MovieComparator implements Comparator<Movie>
{
    @Override
    public int compare(Movie a, Movie b) {
        if (a.getName().compareTo(b.getName()) == 0){
            return a.getAuthor().compareTo(b.getAuthor());
        }
        return a.getName().compareTo(b.getName());
    }
}
System.out.println(movieStorage.getCatalogue(new MovieComparator()));