如何解决是否可以在Java中修改列表的所有元素?
| 我有一个列表String
,并且我想对列表中的所有String
s执行相同的操作。
是否可以不执行循环?
解决方法
您可以使用apache commons util。
, 好吧,某些地方需要循环-如果您想将其抽象到您自己的方法中,可以这样做,但是我不相信框架中内置了任何东西。
番石榴在ѭ2in中提供了多种方法来执行投影等,但是如果您想在每个步骤中修改列表,我不确定是否对此有所支持。同样,您可以根据需要编写自己的方法(极其简单)。
当Java最终获得闭包时,这种事情将变得更加合理-不幸的是,此刻,与对循环进行硬编码相比,指定“ something”操作通常要花更多的精力。
, 您可以递归地执行此操作,但是我不知道您为什么要这样做。您也许可以找到类似于Python的map函数(在后台,它可能是循环或递归方法)。
另请注意,字符串是不可变的-因此,无论如何,您都必须创建“副本”。
, 否。您必须遍历列表。
for(String s:yourlist){
dooperation(s);
}
, 您为什么不想执行循环?
如果它的计算复杂度很高,那么这是不可避免的。本质上,所有方法都将归结为遍历列表中的每个项目。
如果是因为您想要更清洁的东西,那么答案取决于您认为更清洁的东西。有各种各样的库添加了某种形式的功能图,最终它们类似于:
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());
但是可能您不需要这个。一个简单的循环就是要走的路。
, 抱歉,您必须以某种方式遍历列表,最好的方法是循环。
, 取决于您的意思是无循环,这可能会让您感兴趣:
Java的映射函数。
http://www.gubatron.com/blog/2010/08/31/map-function-in-java/
...里面还有一个循环。
, 在Java中,您需要遍历Collection中的元素并应用该方法。我知道Groovy提供了*语法来做到这一点。您可以为您的功能创建一个接口,例如使用apply方法并编写一个方法,该方法采用您的Collection和包含要应用的功能的接口(如果要添加一些常规API来执行此操作)。但是您需要在某个地方进行迭代!
, 对多线程遍历使用分治法。确保返回新的/不可变的转换集合对象(如果要避免并发问题),然后可以最终合并(可能正在使用另一个线程,该线程将在所有工作线程完成划分列表中的转换器任务之后唤醒?) 。
如果在创建这些中间集合时内存不足,请在源集合上进行同步。那就是你能做的最好的。
, 不,您必须为此使用循环。
, 您必须对列表中的字符串的每个引用变量执行操作,因此需要循环。
如果它在List级别,则显然有一些操作(removeAll等)。
, Java API提供了特殊的类来存储和操作对象组。这样的类就是Arraylist
注意Arraylist类在java.util.ArrayList中
就像创建任何对象一样,创建一个ArrayList。
import java.util.ArrayList;
//..
ArrayList ajay = new ArrayList();
这里
ArrayList->类
阿贾伊->对象
您可以选择指定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]
, 接受的答案链接已损坏,并且提供的解决方案已弃用:
CollectionUtils::forAllDo
@已弃用
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的每个元素。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。