我正在尝试从列表中进行排序。
例如:
专辑艺术家X(年份), 专辑歌手Y(2000), 专辑艺术家Y(1971), 专辑艺术家Y(1980), 专辑歌手Z(年)
我想按年份对专辑歌手Y进行排序,而不更改其在X和Z之间的位置
专辑艺术家X(年份), 专辑艺术家Y(1971), 专辑艺术家Y(1980), 专辑歌手Y(2000), 专辑歌手Z(年)
我当前的代码:
public class AlbumListLoader extends BaseLoader<List<? extends Item>> implements MPDConfig {
private Artist mArtist = null;
private List<? extends Item> mItems = null;
public AlbumListLoader(Context context) {
super(context);
}
public AlbumListLoader(Context context, Artist artist) {
super(context);
mArtist = artist;
}
@SuppressWarnings("unchecked")
@Override
public List<? extends Item> loadInBackground() {
final String tri = mSettings.getString("tri", "az");
try {
mItems = MPDApplication.getInstance().oMPDAsyncHelper.oMPD.getAlbums(mArtist);
if (tri.equals("year")) {
Collections.sort((List<? extends Album>) mItems, Album.SORT_BY_YEAR_DSC);
} else if (tri.equals("artist")) {
if (mArtist == null) {
Collections.sort((List<? extends Album>) mItems, Album.SORT_BY_ARTIST);
// Here, I want to sort Album + by date
}
}
} catch (final IOException | MPDException ignore) {
Log.w("AlbumListLoader", "Failed to update.");
}
return mItems;
}
我的相册排序:
public static final Comparator<AbstractAlbum> SORT_BY_ARTIST = new Comparator<AbstractAlbum>() {
@Override
public int compare(final AbstractAlbum lhn, final AbstractAlbum rhn) {
final String leftArtist = lhn.mArtist;
final String rightArtist = rhn.mArtist;
return leftArtist.compareToIgnoreCase(rightArtist);
}
};
我不知道该怎么做,一个主意吗?
编辑:已解决
if (leftArtist.equalsIgnoreCase(rightArtist)) {
int compare = 0;
final int leftYear = formattedYear(lhn.mYear);
final int rightYear = formattedYear(rhn.mYear);
if (leftYear < rightYear) {
compare = -1;
} else if (leftYear > rightYear) {
compare = 1;
}
if (compare == 0) {
compare = lhn.compareTo(rhn);
}
return compare;
} else {
return leftArtist.compareToIgnoreCase(rightArtist);
}
答案 0 :(得分:0)
如果您要从相册中删除重复的条目,则可以如下使用Java Set
和HashSet
Set<List<? extends Album> testList = new HashSet<List<? extends Album>(mItems);
这将从您的mItems
列表中删除重复的条目。现在您可以在ArrayList
中添加重复的已删除列表'testList',如下所示
yourList.addAll(testList);
现在,您可以根据需要过滤列表。 希望它对您有用。