8

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

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

然后将一系列对象添加到 ArrayList 之后,我想遍历它们并检查各种内容。我不是 java 的热心用户,但我知道在许多其他编程语言中,foreach 循环将是最简单的方法。

经过一番研究,我发现了以下链接,它建议了下面的代码。 Java 'for each' 循环是如何工作的?

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

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

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

4

5 回答 5

36

实际上增强的 for 循环应该是这样的

for (final Room room : rooms) {
          // Here your room is available
}
于 2012-11-22T22:04:28.070 回答
8

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

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

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
});

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

ArrayList<Room> rooms = new ArrayList<>();
rooms.forEach(System.out::println);
于 2018-09-01T19:51:57.677 回答
5
for(Room room : rooms) {
  //room contains an element of rooms
}
于 2012-11-22T22:07:41.757 回答
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);
}
于 2012-11-22T22:06:35.690 回答
0

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

于 2015-07-06T11:15:42.163 回答