如何使用compareTo()按字母顺序对TreeSet进行排序

时间:2018-03-20 01:09:34

标签: java

所以我试图按照演员姓名的字母顺序对这个“电影”类型的Arraylist进行排序,并且不包含重复项,这意味着使用树集。

所以我已经实现了“可比较的”界面,然后在按照字母表排序列表之后不知道该怎么做

public int compareTo(Movie m){
    for(Movie movileTitle: moviesList){
        return  movileTitle.getActor().compareTo(m.getActor()); 
    }
    return 0;
} 

//this is where I'm trying add the arrayList of the movies and sort them using a treeSet
public TreeSet<Movie> movieListByOrder(){

    TreeSet<Movie> movieTemp = new TreeSet<>();
    //Note, "allMoviesList" is the the list that contains all movies(duplicates) that I'm trying
   to add to the treeSet, so that it gets rid of duplicates and that is also ordered.

   movieTemp.addAll(allMoviesList);
   System.out.println(movieTemp);
   return movieTemp;
}

2 个答案:

答案 0 :(得分:0)

继续朝着您已经前进的方向前进,您可以在创建TreeSet时尝试使用内联比较器:

Set<Movie> treeSet = new TreeSet<Movie>(new Comparator<Movie>() {
    @Override
    public int compare(Movie m1, Movie m2) {
        if (m1 == null) {
            if (m2 != null) return -1;
            else return 0;
        }
        else if (m2 == null) {
            return 1;
        }
        else {
            return m1.getActor().compareTo(m2.getActor());
        }
    }
});

TreeSet是一个有序集合,这意味着它将保持上述比较器强加的排序顺序。因此,如果您想按顺序打印出集合的内容,则只需要遍历它。

答案 1 :(得分:0)

所有看起来都很陈旧,抱歉。

尝试查看此代码并确定它是否更有趣。

movies.stream()
.sorted(comparing(Movie::getActor))
.distinct()
.collect(toList());

PS:玩性能调整以获得额外信用