首页 > 解决方案 > 使用集合删除列表中的索引

问题描述

我有一个字符串 TrackArray 的 ArrayList,它定义了轨道的唯一 ID。我还需要Set<Integer> indexSet保存需要从 TrackArray 中删除的曲目 ID 的索引。

我尝试了以下方法:

public void deleteAllTracks(){
    if (!indexSet.isEmpty() ) {
        TrackArray.removeAll(indexSet);
    }
    notifyDataSetChanged();
    indexSet.clear();
}

代码不起作用,可能是因为它没有将 Integer 转换为 RemoveAll 中的 int。除了一个一个删除之外,我还没有找到另一种解决方法。

标签: javaintegerhashset

解决方案


理想的解决方案是从indexSet更改Set<Integer>Set<String>. 否则你不能用它从你的ArrayList<String>.

如果无法更改,可以将其转换为Set<String>with:

Set<String> strIndexSet = indexSet.stream().map(Integer::toString).collect(Collectors.toSet());

所以你可以写:

public void deleteAllTracks(){
    if (!indexSet.isEmpty() ) {
        TrackArray.removeAll(indexSet.stream().map(Integer::toString).collect(Collectors.toSet());
    }
    notifyDataSetChanged();
    indexSet.clear();
}

但是,每次调用您的方法时运行此转换的效率会降低。


推荐阅读