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”开头。
答
发现问题。我在Thread
中获取songList
,并在Thread外进行排序。所以,它在线程完成获取数据之前对数据进行排序。移动线程内的排序部分,它工作。
该列表以一首以“h”开头的歌曲开头,然后一首以“o”开头,然后一首以“s”开头。 - 那么,它已经排序了吗? –
@AntonMalyshev对不起,因为我没有提到在“s”之后有4个“a” –
对于正确的数据不可能......使用集合之后进行排序的原因......还记得“s”在“一个” – Selvin