使用 Set<Integer> 删除 List<String> 中的索引

Using Set<Integer> to remove indexes in an List<String>

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

我尝试了以下方法:

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

代码无法运行,可能是因为它没有在 RemoveAll 中将 Integer 转换为 int。除了一个一个删除之外,我还没有找到其他解决方法。

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

中删除元素

如果您无法更改它,您可以将其转换为 Set<String>,方法是:

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();
}

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