是否可以修改java中列表的所有元素?

时间:2011-06-14 15:50:41

标签: java list arraylist

我有String的列表,我想对列表中的所有String执行相同的操作。

是否可以不执行循环?

13 个答案:

答案 0 :(得分:9)

某些东西必须循环到某个地方 - 如果你想将它抽象到你自己的方法中,你可以这样做,但我不相信框架内置了任何内容。

GuavaIterables中有各种方法来执行预测等,但如果你想在每一步修改列表,我不确定是否支持那。同样,如果你愿意,你可以编写自己的方法(非常简单)。

当Java最终获得闭包时,这种事情会变得更加合理 - 不幸的是,目前,指定“某事”操作通常比硬编码循环更值得付出努力。

答案 1 :(得分:4)

你可以递归地做,但我不明白你为什么要这样做。您可能能够找到与Python的map函数类似的东西(在幕后,它将是循环或递归方法)

另请注意,字符串是不可变的 - 因此您无论如何都必须创建“副本”。

答案 2 :(得分:4)

没有。您必须遍历列表。

 for(String s:yourlist){
       dooperation(s);
 }

答案 3 :(得分:3)

为什么你不想进行循环?

如果是计算复杂性,那么不,这是不可避免的。所有方法都将基本归结为迭代列表中的每个项目。

如果是因为你想要更清洁的东西,那么答案取决于你认为更干净的东西。有各种各样的库可以添加某种形式的功能映射,最终会出现类似的内容:

map(list, new Mapper<String, String>() {
    public String map(String input) {
        return doSomethingToString(input);
    }
);

这显然比简单的循环更长,更复杂

for (int i = 0; i < list.size(); i += 1) {
    list[i] = doSomethingToString(list[i]);
}

但它确实提供了可重用性。

map(list, new DoSomethingToStringMapper());
map(otherlist, new DoSomethingToStringMapper());

但可能你不需要这个。一个简单的循环将是要走的路。

答案 4 :(得分:2)

抱歉,你必须以某种方式遍历列表,最好的方法是循环。

答案 5 :(得分:2)

根据无循环的含义,您可能会对此感兴趣: java的map函数。

http://www.gubatron.com/blog/2010/08/31/map-function-in-java/

......里面还有一个循环。

答案 6 :(得分:2)

在Java中,您需要迭代Collection中的元素并应用该方法。我知道Groovy提供*语法来执行此操作。您可以为您的功能创建一个界面,例如使用apply方法并编写一个方法,如果要添加一些通用API来执行此操作,则需要使用Collection和包含该函数的接口。但是你需要在某个地方进行迭代!

答案 7 :(得分:2)

您可以使用apache commons util

答案 8 :(得分:2)

使用多线程遍历进行分而治之。确保返回新的/不可变的转换集合对象(如果你想避免并发问题),然后你最终可以合并(可能正在使用另一个线程,它将在所有工作线程完成分割列表上的变换器任务后唤醒?) 。 如果在创建这些中间集合时缺少内存,则在源集合上进行同步。这是你能做的最好的事情。

答案 9 :(得分:1)

不,你必须使用循环。

答案 10 :(得分:1)

您必须对列表中的字符串的每个引用变量执行操作,因此需要循环。

如果它在List级别,显然有一些操作(removeAll等)。

答案 11 :(得分:1)

java API 提供了用于存储和操作对象组的特殊类。一个这样的类是 Arraylist

请注意 Arraylist 类位于 java.util.ArrayList

像创建任何对象一样创建一个ArrayList。

import java.util.ArrayList;
//..
ArrayList ajay = new ArrayList(); 

这里

  • ArrayList - &gt;类

  • ajay - &gt;对象

您可以选择指定 Arraylist 将容纳的对象的容量和类型:

ArrayList ajay<String> = new ArrayList<String>(10);

Arraylist类为操作对象提供了许多有用的方法..

add()方法将新对象添加到ArrayList.And remove()方法从列表中删除对象..

示例代码:

import java.util.ArrayList;

public class MyClass {
    public static void main(String[ ] args) {
        ArrayList<String> ajay = new ArrayList<String>();
        ajay.add("Red");
        ajay.add("Blue");
        ajay.add("Green");
        ajay.add("Orange");
        ajay.remove("Green");

        System.out.println(colors);
    }
}

此代码的输出:

[Red,Blue,Orange]

答案 12 :(得分:0)

已接受的答案链接已中断,并且已弃用解决方案:

CollectionUtils::forAllDo

  

<强> @Deprecated

     

public static <T,C extends Closure<? super T>> C forAllDo(Iterable<T> collection, C closure)

     

<强>已过时。从4.1开始,使用IterableUtils.forEach(Iterable, Closure)代替

  对集合中的每个元素执行给定的闭包。   如果输入集合或闭包为null,则不会进行任何更改。

您可以使用IterableUtils::forEach(Closure c)

  

将闭包应用于提供的iterable的每个元素。