【发布时间】:2011-09-14 20:08:30
【问题描述】:
我有一个Strings 列表,我想对列表中的所有Strings 执行相同的操作。
是否可以不执行循环?
【问题讨论】:
我有一个Strings 列表,我想对列表中的所有Strings 执行相同的操作。
是否可以不执行循环?
【问题讨论】:
您可以递归地执行此操作,但我不明白您为什么要这样做。你也许能找到类似于 Python 的 map 函数的东西(在幕后,它可能是一个循环或递归方法)
另请注意,字符串是不可变的 - 所以无论如何您都必须创建“副本”。
【讨论】:
没有。您必须遍历列表。
for(String s:yourlist){
dooperation(s);
}
【讨论】:
抱歉,您必须以某种方式遍历列表,最好的方法是循环。
【讨论】:
有些东西必须在某个地方循环——如果你想将它抽象到你自己的方法中,你可以这样做,但我不相信框架中内置了任何东西。
Guava 在Iterables 中有各种方法来执行投影等,但如果你想修改每一步的列表,我不确定是否有任何支持。同样,如果您愿意,您可以编写自己的方法(非常简单)。
当 Java 最终获得闭包时,这种事情会变得更加合理 - 目前,不幸的是,与硬编码循环相比,指定“某物”操作通常比它值得付出更多的努力。
【讨论】:
closures 中的When Java eventually gets closures 是什么意思?
不,您必须为此使用循环。
【讨论】:
根据您所说的无循环,这可能会让您感兴趣: java的map函数。
http://www.gubatron.com/blog/2010/08/31/map-function-in-java/
...里面还有一个循环。
【讨论】:
必须对List中的Strings的每个引用变量进行操作,所以需要循环。
如果是List级别,显然有一些操作(removeAll等)。
【讨论】:
在 Java 中,您需要遍历 Collection 中的元素并应用该方法。我知道 Groovy 提供了 * 语法来做到这一点。您可以为您的功能创建一个接口,例如使用 apply 方法并编写一个方法,该方法采用您的 Collection 和包含要应用的函数的接口,如果您想添加一些通用 API 来执行此操作。但是你需要在某个地方进行迭代!
【讨论】:
为什么不想执行循环?
如果是计算复杂度,那么不,这是不可避免的。所有方法基本上都归结为迭代列表中的每个项目。
如果是因为您想要更清洁的东西,那么答案取决于您认为更清洁的东西。有各种库添加了某种形式的功能映射,最终会是这样的:
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());
但可能你不需要这个。一个简单的循环将是要走的路。
【讨论】:
你可以使用apache commons util。
【讨论】:
在多线程遍历中使用分而治之。确保返回新的/不可变的转换集合对象(如果你想避免并发问题),然后你最终可以合并(可能正在使用另一个线程,在所有工作线程完成划分列表上的转换器任务后唤醒?) . 如果在创建这些中间集合时内存不足,则在源集合上进行同步。这是你能做的最好的。
【讨论】:
已接受的答案链接已损坏,所提供的解决方案已弃用:
@Deprecated
public static <T,C extends Closure<? super T>> C forAllDo(Iterable<T> collection, C closure)已弃用。从 4.1 开始,请改用
IterableUtils.forEach(Iterable, Closure)
对集合中的每个元素执行给定的闭包。 如果输入集合或闭包为空,则不进行任何更改。
你可以使用IterableUtils::forEach(Closure c)
将闭包应用于提供的可迭代对象的每个元素。
【讨论】:
java API 提供了特殊的类来存储和操作对象组。一个这样的类是 Arraylist
注意 Arraylist 类在 java.util.ArrayList
像创建任何对象一样创建一个 ArrayList。
import java.util.ArrayList;
//..
ArrayList ajay = new ArrayList();
这里
ArrayList -> 类
ajay -> 对象
您可以选择指定 Arraylist 将容纳的对象的容量和类型:
ArrayList ajay<String> = new ArrayList<String>(10);
Arraylist 类提供了许多有用的方法来操作对象..
add() 方法将新对象添加到 ArrayList。而 remove() 方法从 List 中删除对象..
示例代码:
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]
【讨论】: