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