从ArrayList中排除元素

3

我想遍历一个字符串类型的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)]

1
什么是问题? - Shivam
但我在想,是否有更短的形式。 - Edward
你在@Edward处得到了很多答案。 - Shivam
“短形式”是什么意思?你的代码示例是一行Java代码。怎么可能比这更短呢? - scottb
@Shivam: 我在等待接受 Erans 的答案(还剩2分钟) - Edward
6个回答

9
你可以使用list.subList(0, list.size() - 1)来获取一个不包含最后一个元素的List视图。

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

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


4
请注意,如Eran所说,subList返回列表的“视图”,因此对列表所做的任何更改都将反映出来。如果您想创建副本,则应将其提供给列表构造函数:new ArrayList<>(list.subList(0,list.size()-1)) - Thirler

3

Java中的列表有一个sublist方法

subList(int fromIndex, int toIndex)返回此列表中指定fromIndex(包括)和toIndex(不包括)之间部分的视图。

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

@AndyTurner 我的错误,非常感谢!!:) - ΦXocę 웃 Пepeúpa ツ

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 包含除最后一个元素外的所有列表元素。

1

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

这样,就不需要其他列表了。


这个怎么比原问题中的for循环更短呢? - BateTech

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

}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接