使用 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。除了一个一个删除之外,我还没有找到其他解决方法。
理想的解决方案是将 indexSet
从 Set<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();
}
但是,每次调用您的方法时 运行 这种转换的效率会降低。
我有一个字符串 TrackArray 的 ArrayList,它定义了轨道的唯一 ID。
我还有一个 Set<Integer> indexSet
来保存我需要从 TrackArray 中删除的轨道 ID 的索引。
我尝试了以下方法:
public void deleteAllTracks(){
if (!indexSet.isEmpty() ) {
TrackArray.removeAll(indexSet);
}
notifyDataSetChanged();
indexSet.clear();
}
代码无法运行,可能是因为它没有在 RemoveAll 中将 Integer 转换为 int。除了一个一个删除之外,我还没有找到其他解决方法。
理想的解决方案是将 indexSet
从 Set<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();
}
但是,每次调用您的方法时 运行 这种转换的效率会降低。