【问题标题】:Remove multiple items from ArrayList从 ArrayList 中删除多个项目
【发布时间】:2013-08-31 18:23:09
【问题描述】:

我想从 arraylist 中删除多个项目。

这是列表:

String1-1, String5, String6, String1-2, String5, String6, String1-3, String5, String6

我想从列表中删除String1-。但是因为不是所有的String1- 都有相同的结尾,所以它们没有被删除。所以list.remove("String1-") 不起作用。

问题是:当我要删除的字符串结尾不同时,如何从arraylist中删除多个项目。

【问题讨论】:

  • 我提交了一个替代答案,如果您有时间查看它并尝试构思它所传达的信息。它可能会帮助您避免将来出现很多错误。

标签: java android string arraylist


【解决方案1】:

没有单一的方法可以做到这一点,但是如果您遍历ArrayList 并使用String.startsWith 方法测试字符串是否以"String1-" 开头,则可以很容易地做到这一点。

这是一个例子。请注意,我使用了迭代器,因为它比使用 for 循环更容易从数组中删除内容。

Iterator<String> it = arrayList.iterator();
while (it.hasNext() ) {
   String value = it.next();
   if (value.startsWith("String1-") ) {
     it.remove();
   }
}

【讨论】:

    【解决方案2】:

    为了将来参考,这里有一个使用 Google Guava 的解决方案。

    一些用于从问题字符串创建列表的设置代码:

    String stringsString = "String1-1, String5, String6, String1-2, String5, String6, String1-3, String5, String6";
    String[] stringsArray = stringsString.split(", ");
    Iterable<String> stringsList = Arrays.asList(stringsArray);
    

    现在过滤掉不需要的项目:

    Iterable<String> filtered = Iterables.filter(stringsList, new Predicate<String>() {
        @Override
        public boolean apply(String input) {
            return !input.startsWith("String1-");
        }
    });
    

    这个简单的例程创建一个新的Iterable,它只包含您指定的元素。这样做的美妙之处在于它是惰性执行的(仅在您真正想要使用它时才评估)并且它不会修改原始集合。在大多数情况下,使您的软件状态不可变(不可修改)是您能做的最好的事情。处理可变集合很困难,而且它们通常是软件错误的原因。

    【讨论】:

    • 谢谢,也试试这个!
    猜你喜欢
    • 1970-01-01
    • 2012-05-29
    • 2014-05-17
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 2023-03-15
    • 2015-06-30
    相关资源
    最近更新 更多