Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中用于自定义对象列表的Foreach循环_Java_Foreach_Arraylist - Fatal编程技术网

java中用于自定义对象列表的Foreach循环

java中用于自定义对象列表的Foreach循环,java,foreach,arraylist,Java,Foreach,Arraylist,我有一个类型为Room(我的自定义对象)的ArrayList,定义如下 ArrayList<Room> rooms = new ArrayList<Room>(); ArrayList房间=新建ArrayList(); 在将一系列对象添加到ArrayList之后,我希望遍历所有对象并检查各种内容。我不是java的热心用户,但我知道在许多其他编程语言中,foreach循环是实现这一点最简单的方法 经过一点研究,我发现了下面的链接,它暗示了下面的代码。 for(迭代器i

我有一个类型为Room(我的自定义对象)的ArrayList,定义如下

ArrayList<Room> rooms = new ArrayList<Room>();
ArrayList房间=新建ArrayList();
在将一系列对象添加到ArrayList之后,我希望遍历所有对象并检查各种内容。我不是java的热心用户,但我知道在许多其他编程语言中,foreach循环是实现这一点最简单的方法

经过一点研究,我发现了下面的链接,它暗示了下面的代码。

for(迭代器i=someList.Iterator();i.hasNext();){
String item=i.next();
系统输出打印项次(项);
}
但据我所知,这不能用于自定义对象的Arraylist

可以,如果可以,我如何为自定义对象的ArrayList实现foreach循环? 或者,我如何处理每个项目?

实际上,项目应该是这样的

for (final Room room : rooms) {
          // Here your room is available
}

通过更改类的参数化,可以使用迭代器模式修复示例:

List<Room> rooms = new ArrayList<Room>();
rooms.add(room1);
rooms.add(room2);
for(Iterator<Room> i = rooms.iterator(); i.hasNext(); ) {
  String item = i.next();
  System.out.println(item);
}
List rooms=new ArrayList();
房间。添加(房间1);
房间。添加(房间2);
for(迭代器i=rooms.Iterator();i.hasNext();){
String item=i.next();
系统输出打印项次(项);
}
或者更简单的方法:

List<Room> rooms = new ArrayList<Room>();
rooms.add(room1);
rooms.add(room2);
for(Room room : rooms) {
  System.out.println(room);
}
List rooms=new ArrayList();
房间。添加(房间1);
房间。添加(房间2);
用于(房间:房间){
系统输出打印(房间);
}

如果此代码无法对列表中的每个项目进行操作,那一定是因为在您完成列表之前有什么东西抛出了异常;最有可能的候选方法是名为“insertOrThrow”的方法。您可以将该调用包装在try-catch结构中,以处理失败项的异常,而不必过早退出循环和方法。

使用也可以使用Java 8流API,并在一行中执行相同的操作

如果要打印任何特定属性,请使用以下语法:

ArrayList<Room> rooms = new ArrayList<>();
rooms.forEach(room -> System.out.println(room.getName()));
ArrayList房间=新建ArrayList();
rooms.forEach(room->System.out.println(room.getName());

ArrayList房间=新建ArrayList();
房间。forEach(房间->{
//这里有空房间
});
如果要打印Java对象的所有属性,请使用以下命令:

ArrayList<Room> rooms = new ArrayList<>();
rooms.forEach(System.out::println);
ArrayList房间=新建ArrayList();
rooms.forEach(System.out::println);

您试过了吗?当然,它适用于自定义对象。谷歌搜索“Javaforeach”会出现以下页面:一点研究?我花了2秒钟。在上面的代码中,“最终”是什么?下面的示例似乎没有这种情况。当您使用的变量包含常量值或引用(如您的情况)不应更改时,使用
final
关键字被认为是一种良好的做法。在这个
for
循环中,它防止了循环中的代码意外地将不同的
Room
分配给
Room
局部变量。@ShyJ但它并没有真正添加任何内容。分配房间没有坏处,将房间设为最终房间并不能防止通过改变房间可能造成的任何伤害。@Cubic好吧,如果没有最终房间,实际上可以有一个
room=newroom()
语句在循环体中,并在完全不同的房间中操作。此示例与包含单词“final”的另一个答案中的代码有什么区别?如果变量是final,则表示您可以
t更改它的值。因此,在迭代时,不允许您更新它的值。
ArrayList<Room> rooms = new ArrayList<>();
rooms.forEach(room -> System.out.println(room.getName()));
ArrayList<Room> rooms = new ArrayList<>();
rooms.forEach(room -> {
    // here room is available
});
ArrayList<Room> rooms = new ArrayList<>();
rooms.forEach(System.out::println);