在 PHP 中,可以做到foreach($array as $key=>$value){//codes
. 是否可以在 Java 中创建一个函数来执行foreach(arr,function(key,value){//codes});
?
我不太擅长Java。为了使函数工作,它必须接受所有数据类型。另外,我不确定回调函数是否可以在 Java 中使用。
PS“不可能”是一个有效的答案,谢谢!
在 PHP 中,可以做到foreach($array as $key=>$value){//codes
. 是否可以在 Java 中创建一个函数来执行foreach(arr,function(key,value){//codes});
?
我不太擅长Java。为了使函数工作,它必须接受所有数据类型。另外,我不确定回调函数是否可以在 Java 中使用。
PS“不可能”是一个有效的答案,谢谢!
是的你可以:
List<String> ls = new ArrayList();
ls.add("Hello");
ls.add("world");
//your foreach sentence
for(String s : ls) {
System.out.println(s);
}
这也适用于其他类。
更新
当您遍历列表(数组或链表)时,索引将是索引。您将需要使用替代整数来保存索引:
List<String> ls = new ArrayList();
ls.add("Hello");
ls.add("world");
//your foreach sentence
int index = 0;
for(String s : ls) {
System.out.println("index: " + index);
System.out.println(s);
//put your logic here...
//at the end, update the index manually
index++;
}
如果您需要遍历 Map (基于键,值的结构),那么您应该使用@LukasEder 描述的方法(改编他的代码):
Map<K, V> array = new HashMap<K, V>();
for (Entry<K, V> entry : array.entrySet()) {
// You have to explicitly call your callback. There is no "callback-syntax"
// to the Java "foreach" loop
System.out.println("key: " + entry.getKey());
System.out.println("value: " + entry.getValue());
//put your logic here...
}
其他答案已经解释了“增强的 for 循环”语法是如何工作的。这很可能就是你所需要的。
但我想解决您实际提出的问题:
是否可以在 Java 中创建一个函数来执行以下操作:
foreach(arr,function(key,value){//codes});
如所写,这将是一个将另一个函数作为参数的函数(或方法)。这在当前定义的 Java 中是不可能的。Java 不允许将函数(或方法)视为一等对象。它们不能作为参数传递。您可以在(当前)Java 中获得的最接近的方法是创建这样的Function
接口:
public interface Function {
public void fun(Object arg1, Object arg2);
}
并按如下方式使用它:
Object[] arr = ...
foreach (arr, new Function() {
public void fun (Object key, Object value) {
// do stuff
}});
(我正在考虑一个事实,即 PHP 数组更像是 Java HashMap 而不是 Java 数组。这会影响你实现这种东西的方式......但这有损于我试图提出的要点。 )
在未来的某个时候,Java 将得到增强,以支持一流的函数/闭包/lambda 或类似的东西。有一段时间,该功能原计划用于 Java 7,但为了完成 Java 7,不得不推迟。
更新- 现在很明显, Java 8将支持 lambda 。这个新功能已在早期版本下载中。
由于 PHP 数组实际上是关联数组,因此最接近您的代码的是使用 Java Map
:
Map<K, V> array = new HashMap<K, V>();
for (Entry<K, V> entry : array.entrySet()) {
// You have to explicitly call your callback. There is no "callback-syntax"
// to the Java "foreach" loop
MyClass.myMethod(entry.getKey(), entry.getValue());
}
将<K>
and替换<V>
为更具体的类型,例如Map<String, String>
,或Map<Integer, String>
等...
如果您使用的是真正的(索引)数组,则不能编写“foreach”循环来访问索引。您将不得不求助于索引循环:
// Using Java arrays
String[] array = { "a", "b", "c" };
for (int i = 0; i < array.length; i++) {
MyClass.myMethod(i, array[i]);
}
// Using Java Lists
List<String> list = Arrays.asList("a", "b", "c");
for (int i = 0; i < list.size(); i++) {
MyClass.myMethod(i, list.get(i));
}
Java中有一个foreach,例如:
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
for (String s : list) {
System.out.println(s);
}
是的。如果您正在迭代实现 Iterable 的数组或对象,则以下语法将起作用:
SomeType someValue=null;
for (someValue : setOfValues) {
...
}
例如:
Map<String,String> colors=new HashMap<String,String>();
colors.put("r","red");
colors.put("g","green");
colors.put("b","blue");
for (String code : colors.keySet()) {
process(code, colors.get(code));
}
是的,只要您正在迭代的集合实现,您就可以Iterable
。所以你可以有这样的东西:
Map<String, Object> map = new HashMap<String, Object>();
...
for (String str : map.keySet())
{
System.out.println(str);
}
那应该创建一个HashMap
键值集合。如果您只想遍历普通集合,例如Lists
and Arrays
,您可以执行以下操作:
List<String> strings = new ArrayList<String>();
....
for(String str : strings)
{
System.out.println(str);
}
它被称为“增强的 for 循环”
截屏:http ://www.youtube.com/watch?v=w41D0V-BnKQ
http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html
http://www.java-tips.org/java-se-tips/java.lang/the-enhanced-for-loop.html