【问题标题】:Exclude elements from ArrayList从 ArrayList 中排除元素
【发布时间】:2016-02-21 11:55:55
【问题描述】:

我想遍历一个字符串数组列表:

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)]

【问题讨论】:

  • 问题是什么?
  • > 但我想知道是否有更短的形式。
  • 你得到了很多答案@Edward
  • 短格式是什么意思?您的代码示例是一行 Java 代码。你怎么能比这更短?
  • @Shivam:我正在等待接受 Erans 的回答(还剩 2 分钟)

标签: java arraylist iterator


【解决方案1】:

您可以使用list.subList(0,list.size()-1) 来查看不包含最后一个元素的列表。

List&lt;E&gt; java.util.List.subList(int fromIndex, int toIndex)

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

【讨论】:

  • 始终注意subList 返回 lis 的“视图”,正如 Eran 所说。因此,对列表的任何更改都会反映出来。如果要创建副本,请将其提供给列表的构造函数:new ArrayList&lt;&gt;(list.subList(0,list.size()-1))
【解决方案2】:

Java 中的列表有一个sublist method

subList(int fromIndex, int toIndex) 返回部分的视图 此列表介于指定的 fromIndex 和 toIndex 之间, 独家。

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

【讨论】:

  • @AndyTurner 我的错,Thnsk 很多!!:)
【解决方案3】:
    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 包含了列表中除最后一个以外的所有元素。

【讨论】:

    【解决方案4】:

    在 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

    【讨论】:

      【解决方案5】:

      也试试这个回复

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

      }

      【讨论】:

        【解决方案6】:

        还有另一种选择。

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

        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 循环短多少?
        猜你喜欢
        • 2013-02-24
        • 2016-07-23
        • 1970-01-01
        • 2011-05-13
        • 2011-06-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多