Collections.sort没有对数据进行排序

问题描述:

我有一个名为Song自定义类像这个 -Collections.sort没有对数据进行排序

public class Song implements Parcelable { 
private String mTitle; 
private String mArtist; 
private long mID; 
private long albumID; 

public Song(long id,String title, String artist,long albumId) 
{ 
    this.mID=id; 
    this.mTitle=title; 
    this.mArtist=artist; 
    this.albumID=albumId; 
} 

public long getAlbumID() { 
    return albumID; 
} 

public void setAlbumID(long albumID) { 
    this.albumID = albumID; 
} 

public long getID() 
{ 
    return mID; 
} 

public String getArtist() { 
    return mArtist; 
} 

public String getTitle() { 
    return mTitle; 
} 

public void setID(long mID) { 
    this.mID = mID; 
} 

public void setTitle(String mTitle) { 
    this.mTitle=mTitle; 
} 

public void setArtist(String mArtist) { 
    this.mArtist = mArtist; 
} 


@Override 
public int describeContents() { 
    return 0; 
} 

@Override 
public void writeToParcel(Parcel parcel, int i) { 
     parcel.writeString(mTitle); 
    parcel.writeString(mArtist); 
    parcel.writeLong(mID); 
    parcel.writeLong(albumID); 
} 

public static final Parcelable.Creator CREATOR=new Parcelable.Creator() 
{ 
    public Song createFromParcel(Parcel in) 
    { 
     return new Song(in); 
    } 

    public Song[] newArray(int size) 
    { 
     return new Song[size]; 
    } 
}; 
public Song(Parcel in) 
{ 
    mTitle=in.readString(); 
    mArtist=in.readString(); 
    mID=in.readLong(); 
    albumID=in.readLong(); 

    } 


} 

ArrayList<Song>

我想按字母顺序排序数据。我正在使用 -

Collections.sort(songList, new Comparator<Song>() { 
     @Override 
     public int compare(Song a, Song b) { 
      return (a.getTitle().compareToIgnoreCase(b.getTitle())); 
     } 
    }); 

但是,我的数据仍未排序。该列表以一首以“h”开头的歌曲开始,然后一首以“o”开头,然后一首以“s”开头。

+1

该列表以一首以“h”开头的歌曲开头,然后一首以“o”开头,然后一首以“s”开头。 - 那么,它已经排序了吗? –

+0

@AntonMalyshev对不起,因为我没有提到在“s”之后有4个“a” –

+0

对于正确的数据不可能......使用集合之后进行排序的原因......还记得“s”在“一个” – Selvin

发现问题。我在Thread中获取songList,并在Thread外进行排序。所以,它在线程完成获取数据之前对数据进行排序。移动线程内的排序部分,它工作。