【问题标题】:Remove multiple elements with multiple indexes from arraylist in java从java中的arraylist中删除具有多个索引的多个元素
【发布时间】:2019-07-10 21:13:52
【问题描述】:

我有两个 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]

【问题讨论】:

标签: java arrays string arraylist


【解决方案1】:

你应该在最后添加:

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

完成。

【讨论】:

    【解决方案2】:

    使用java流API的解决方案,

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

    【讨论】:

    • Shaunak Patel...非常感谢您花时间制作它。
    【解决方案3】:
     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);
        }
    

    给你。从数组开始的最大索引中删除 :)

    【讨论】:

      【解决方案4】:

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

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

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

      指定的项目的列表

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-31
        • 2021-05-15
        • 2015-04-09
        相关资源
        最近更新 更多