基于实现Comparator的类进行排序的Collection排序

问题描述 投票:0回答: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]

应该这样做的方法(在MovieStorage类中:)>

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()));

我一直在寻找StackOverflow和其他网站,但是我注意到每个人都根据1个参数对它进行排序(这对我也不起作用),同时,代码与我的代码几乎相同。 。>

非常感谢您的帮助:)

更具体而言,我对馆藏排序有问题输出:[B_Author:Movie_X,A_Author:Movie_A,A_Author:Movie_B]应该是:[A_Author:Movie_A,A_Author:Movie_B,B_Author:Movie_X ...

java compare comparator comparable compareto
1个回答
2
投票

创建比较器的更紧凑的方法:

Comparator<Movie> comparator =
    Comparator.comparing(Movie::getName).thenComparing(Movie::getAuthor);

Set<Movie> movies = new TreeSet<>(comparator);
movies.addAll(movieList);
© www.soinside.com 2019 - 2024. All rights reserved.