对列表中的重复条目进行排序

时间:2019-01-01 11:13:11

标签: java android

我正在尝试从列表中进行排序。

例如:

专辑艺术家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);
        }

1 个答案:

答案 0 :(得分:0)

如果您要从相册中删除重复的条目,则可以如下使用Java SetHashSet

Set<List<? extends Album> testList = new HashSet<List<? extends Album>(mItems);

这将从您的mItems列表中删除重复的条目。现在您可以在ArrayList中添加重复的已删除列表'testList',如下所示

yourList.addAll(testList);

现在,您可以根据需要过滤列表。 希望它对您有用。