#java #integer #hashset
#java #целое число #hashset
Вопрос:
У меня есть ArrayList строк TrackArray, которые определяют уникальные идентификаторы дорожек. У меня также есть Set<Integer> indexSet
, чтобы сохранить индексы идентификаторов дорожек, которые мне нужно удалить из TrackArray.
Я попробовал следующее:
public void deleteAllTracks(){
if (!indexSet.isEmpty() ) {
TrackArray.removeAll(indexSet);
}
notifyDataSetChanged();
indexSet.clear();
}
Код не работает, вероятно, потому, что он не преобразует целое число в int в removeAll . Я не нашел другого обходного пути, кроме удаления по одному.
Ответ №1:
Идеальным решением было бы изменить indexSet
from Set<Integer>
на a 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();
}
Однако было бы менее эффективно запускать это преобразование при каждом вызове вашего метода.