Использование Set для удаления индексов в списке

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

Однако было бы менее эффективно запускать это преобразование при каждом вызове вашего метода.