简体   繁体   English

如何从Java中的列表中删除当前元素

[英]How to remove current element from List in java

How do I remove current element from list while iterating using for loop ? 在使用for loop进行迭代时,如何从列表中删除当前元素?

I have below a list containing: 我在下面的列表中包含:

List<String> list = new ArrayList<String>();
        list.add("a");
        list.add("a2");
        list.add("a3");
        list.add("a4");
        list.add("a5");
        list.add("a6");
        list.add("a7");
        list.add("a8");
        list.add("a9");
        list.add("a10");
        list.add("a11");
        list.add("a12");
        list.add("a13");
        list.add("a14");
        list.add("a15");


        List<List<String>> parts = chopped(list, 4);
        System.out.println(parts);

which gives me output below like this: 这给我下面的输出:

[[a, a2, a3, a4], [a5, a6, a7, a8], [a9, a10, a11, a12], [a13, a14, a15]]

Now I am trying to remove first list from the list in below program: 现在,我试图从下面程序的列表中删除第一个列表:

for(int i=0; i<parts.size(); i++){

    System.out.println("Loop number: "+i);
    System.out.println("Current list: "+parts);         

    Thread.sleep(2000);
    parts.remove(i);

    System.out.println("After removing: "+parts);
}

Here I am using parts.remove(i); 在这里我使用parts.remove(i); to remove current element, it gives me the following output: 删除当前元素,它给我以下输出:

[[a, a2, a3, a4], [a5, a6, a7, a8], [a9, a10, a11, a12], [a13, a14, a15]]
Loop number: 0
Current list: [[a, a2, a3, a4], [a5, a6, a7, a8], [a9, a10, a11, a12], [a13, a14, a15]]
After removing: [[a5, a6, a7, a8], [a9, a10, a11, a12], [a13, a14, a15]]
Loop number: 1
Current list: [[a5, a6, a7, a8], [a9, a10, a11, a12], [a13, a14, a15]]
After removing: [[a5, a6, a7, a8], [a13, a14, a15]]

This one removes first current element [a, a2, a3, a4] which is correct but in running second loop it removes [a9, a10, a11, a12] . 这删除了正确的第一当前元素[a, a2, a3, a4] ,但在运行第二个循环时,它删除了[a9, a10, a11, a12]

I want to remove it loop wise like below: 我想像下面这样明智地删除它:

[[a, a2, a3, a4], [a5, a6, a7, a8], [a9, a10, a11, a12], [a13, a14, a15]]
[[a5, a6, a7, a8], [a9, a10, a11, a12], [a13, a14, a15]]
[[a9, a10, a11, a12], [a13, a14, a15]]
[[a13, a14, a15]]
[]

Edited: 编辑:

When I try to access List inside List using parts.get(loopNumber) or parts.get(i)` it throws an exception error: 当我尝试使用parts.get(loopNumber)或parts.get(i)访问List内部的List时,抛出异常错误:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 2, Size: 1
    at java.util.ArrayList.rangeCheck(Unknown Source)
    at java.util.ArrayList.get(Unknown Source)
    at gmailSendLaptopGUI.MyProgram.main(MyProgram.java:156)

The problem is that you are editing the list and at the same time reading it. 问题在于您正在编辑列表并同时阅读它。

You have to decrease the counter when you remove an object from the list. 从列表中删除对象时,必须减少计数器。

for(int i=0; i<parts.size(); i++){

    System.out.println("Loop number: "+i);
    System.out.println("Current list: "+parts);         

    Thread.sleep(2000);
    parts.remove(i--);

    System.out.println("After removing: "+parts);
}

One more way to do is this: 另一种方法是:

 int loopNumber = 0;
    while (!parts.isEmpty()) {
        System.out.println("Loop" + loopNumber);
        parts.remove(0);
        loopNumber++;
        System.out.println(parts);
    }

Not sure why are you putting Thread.sleep(). 不知道为什么要放置Thread.sleep()。

You have already fine answers but I think that if you want to keep a for statement, a simple and readable way is not specifying increment ( i++ ) in the ForUpdate part of the for statement as it is not mandatory and you always want to suppress the current first element ( parts.remove(0) ). 您已经有了很好的答案,但是我认为,如果要保留for语句, 一种简单易懂的方法是不在for语句的ForUpdate部分中指定增量( i++ ),因为它不是强制性的,并且您始终希望取消显示当前的第一个元素( parts.remove(0) )。

for(int i=0; i<parts.size(); ){
   System.out.println("Current list: "+parts);         

   Thread.sleep(2000);
   parts.remove(0);

   System.out.println("After removing: "+parts);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM