从ArrayList中排除元素

时间:2015-11-19 11:08:55

标签: java arraylist iterator

我想迭代字符串的ArrayList:

List<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("C");

而不是迭代所有项目:

for(String a : list) {
  System.out.println(a);
}

我想排除列表的最后一个元素。目前我使用:

for(int i = 0; i < list.size()-1; i++) {
  System.out.println(list.get(i));
}

但我想知道,如果有一个较短的表格。例如,在R中,您只需生成一个没有最后一个元素的列表:

a = c("A", "B", "C")
a[-length(a)]

6 个答案:

答案 0 :(得分:9)

您可以使用list.subList(0,list.size()-1)获取没有最后一个元素的List视图。

  

List<E> java.util.List.subList(int fromIndex,int toIndex)

     

返回指定fromIndex(包含)和toIndex(独占)之间此列表部分的视图。 (如果fromIndex和toIndex相等,则返回的列表为空。)返回的列表由此列表支持,因此返回列表中的非结构更改将反映在此列表中,反之亦然。返回的列表支持此列表支持的所有可选列表操作。

答案 1 :(得分:3)

Java中的列表有sublist method

  

subList(int fromIndex,int toIndex)返回部分视图   此列表在指定的fromIndex(包含)和toIndex之间,   排他性的。

List<String> sub = yourList.subList(0, yourList.size()-1);

答案 2 :(得分:1)

    List<String> list = new ArrayList<String>();
    list.add("A");
    list.add("B");
    list.add("C");

    List<String> newList = new ArrayList<String>(list);
    newList.remove(newList.size()-1);

现在,newList包含列表的所有元素,除了last。

答案 3 :(得分:1)

在Java 8中:

IntStream.range(0, list.size() - 1).forEach(i -> System.out.println(list.get(i)));

文档:https://docs.oracle.com/javase/8/docs/api/java/util/stream/IntStream.html

答案 4 :(得分:0)

还有另一种选择。

您可以使用迭代器排除元素:

List<String> list = new ArrayList<>();
             list.add("A");
             list.add("B");
             list.add("C");

Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){
    String i = iterator.next();
    if(isRemovable(i)){ //your condition to remove item here
        iterator.remove();
    }
}

这样,不需要其他列表。

答案 5 :(得分:0)

也尝试此回复

public static void main(String[] args) {
     List<String> list = new ArrayList<String>();
     list.add("A");
     list.add("B");
     list.add("C");


       System.out.println("the tetter to be deleted"+list.get(list.size()-1));

       list.remove(list.size()-1);
       for(String a : list) {
           System.out.println(a);
       }

}