从Java中的arraylist中删除具有多个索引的多个元素

时间:2019-02-17 07:40:10

标签: java arrays string arraylist

我有两个List2。我将项目存储在一个列表中,在第二个列表中存储了我认为是索引的整数。

我想从所有索引的项目列表中删除项目。

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]

4 个答案:

答案 0 :(得分:0)

您应该在末尾添加:

  Collections.reverse(indexes); 
    for(Integer index : indexes){
        items.remove((int)index);
    }
  1. 带有索引的反向列表,因为当您从1删除到n时,下一个字母会更改索引号,并且当您想要删除索引“ 3”时,您实际上会删除索引“ 4”。
  2. 遍历要删除的索引。
  3. 将整数转换为整数-remove(int index)

完成。

答案 1 :(得分:0)

使用java流API的解决方案

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

答案 2 :(得分:0)

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

您在这里。从数组中删除最大索引的开头:)

答案 3 :(得分:0)

对于卡住并登陆此页面的任何人,但您的索引不是索引的列表,而是索引的数组。这个页面很有帮助,但我稍微调整了答案,它奏效了。代码如下

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

注意:ItemIndices 表示列表中要删除的位置的索引。 uriCache 不是必需的,我在我的代码中使用它来存储已删除项目的列表(顺便说一下,它们是 URI)。 mediaUris 是您要删除那些具有由数组 itemIndices

指定的索引的项目的列表