Удалить несколько элементов с несколькими индексами из массива в java

У меня есть два List2. Я храню элементы в одном списке, а во втором списке я храню числа int, которые считаю индексами.

Я хочу удалить элементы из списка элементов со всеми индексами.

ArrayList<String> items = new ArrayList<String>();

ArrayList<Integer> indexes = new ArrayList<Integer>();

items.add("a");
items.add("b"); // should be removed
items.add("c"); 
items.add("d"); // should be removed
items.add("e");
items.add("f"); // should be removed 
items.add("g");
items.add("h");


indexes.add(1);
indexes.add(3);
indexes.add(5);


Output : items : [a,c,e,g,h]

Прочтите Как задать хороший вопрос

Stephen C 17.02.2019 08:43
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
2 950
4

Ответы 4

Вы должны добавить в конце:

  Collections.reverse(indexes); 
    for(Integer index : indexes){
        items.remove((int)index);
    }
  1. Обратный список с индексами, потому что при удалении от 1 до n следующей буквы изменяются номера индексов, а когда вы хотите удалить индекс «3», вы действительно удаляете индекс «4».
  2. Прокрутите индексы, которые вы хотите удалить.
  3. Привести Integer к int — удалить (внутренний индекс).

Сделанный.

Решение с использованием API потока Java,

IntStream.range(0, items.size()).filter(i -> !indexes.contains(i)).mapToObj(items::get)
                .collect(Collectors.toList())

Shaunak Patel... Большое спасибо, что нашли время, чтобы сделать это.

Maqsood Hakro 17.02.2019 16:16
 public static void filter(List<String> list, List<Integer> indexesToRemove){
        Collections.reverse(indexesToRemove);
        for (Integer indexToRemove : indexesToRemove) {
            list.remove((int)indexToRemove);
        }

    }
    public static void main(String[] args) {
        ArrayList<String> items = new ArrayList<String>();

        ArrayList<Integer> indexes = new ArrayList<Integer>();

        items.add("a");
        items.add("b"); // should be removed
        items.add("c");
        items.add("d"); // should be removed
        items.add("e");
        items.add("f"); // should be removed
        items.add("g");
        items.add("h");


        indexes.add(1);
        indexes.add(3);
        indexes.add(5);

        filter(items, indexes);
        System.out.println(items);
    }

Ну вот. Удалить из массивов начало самого большого индекса :)

Для всех, кто застрял и попал на эту страницу, но ваши индексы были не Список индексов, а массивом индексов. Эта страница была полезна, но я немного подправил ответы, и это сработало. Код ниже

 Arrays.sort(itemIndices, Collections.reverseOrder());
        for (int i : itemIndices) {
            uriCache.add(mediaUris.remove(i));
        }

Примечание: ItemIndices представляет индексы позиций в списке, которые вы хотите удалить. uriCache не нужен, я использовал его в своем коде для хранения списка удаленных элементов (которые, кстати, были URI). mediaUris — это список, из которого вы хотите удалить элементы с индексами, указанными в массиве itemИндексы.

Другие вопросы по теме