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

时间:2012-11-22 22:02:49

标签: java foreach arraylist

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

ArrayList<Room> rooms = new ArrayList<Room>();

然后在ArrayList中添加一系列对象后,我想通过它们查看各种内容。我不是java的敏锐用户,但我知道在许多其他编程语言中,foreach循环将是最简单的方法。

经过一番研究后,我发现以下链接提示下面的代码。 How does the Java 'for each' loop work?

for(Iterator<String> i = someList.iterator(); i.hasNext(); ) {
  String item = i.next();
  System.out.println(item);
}

但据我所知,这不能用于自定义对象的Arraylist。

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

5 个答案:

答案 0 :(得分:28)

实际上enhanced for loop看起来应该是这样的

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

答案 1 :(得分:5)

for(Room room : rooms) {
  //room contains an element of rooms
}

答案 2 :(得分:3)

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

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

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

OR

ArrayList<Room> rooms = new ArrayList<>();
rooms.forEach(room -> {
    // here room is available
});

如果要打印Java对象的所有属性,请使用以下方法:

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

答案 3 :(得分:2)

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

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<Room> rooms = new ArrayList<Room>();
rooms.add(room1);
rooms.add(room2);
for(Room room : rooms) {
  System.out.println(room);
}

答案 4 :(得分:0)

如果此代码无法对列表中的每个项目进行操作,那么必须是因为在您完成列表之前某些事情会引发异常;最有可能的候选人是名为&#34; insertOrThrow&#34;的方法。您可以在try-catch结构中包装该调用,以便在没有退出循环和方法的情况下处理任何失败的项目的异常。

相关问题