简体   繁体   English

Java - 如何迭代/遍历对象的嵌套列表?

[英]Java - how to iterate / traverse nested list of objects?

I'd like to iterate over a nested list of objects.我想遍历一个嵌套的对象列表。 reservedOrder is a list of objects containing a list of PlannedOrder. reservedOrder 是包含 PlannedOrder 列表的对象列表。

public class PlannedOrder {
      private Object name;
      private Object price;
      private Object quantity;      
}

final List<Object> reservedOrders = new ArrayList<Object>();
for (final Iterator iterator = AllOrdersList.iterator(); iterator.hasNext();)
    {
    if(condition){
      final OrderModel orderModel = (OrderModel) iterator.next();   
      final List<PlannedOrder> plannedOrders = new ArrayList<PlannedOrder>();
      final PlannedOrder singleOrder = new PlannedReservationOrder();
      singleOrder.setName(orderModel.getName());
      singleOrder.setPrice(orderModel.getPrice());
      singleOrder.setQuantity(orderModel.getQuantity());
      reservedOrders.addAll(plannedOrders);
      }
    }

Can someone explain why java.lang.ClassCastException is thrown here in this nested loop?有人可以解释为什么在这个嵌套循环中会抛出 java.lang.ClassCastException 吗? How can I access each object in the inner list with for-each / iterator?如何使用 for-each / iterator 访问内部列表中的每个 object?

for (final Object order : reservedOrders)
    {
     final List<PlannedOrder> singleOrder = (List<PlannedOrder>) order;
        for (final PlannedOrder plannedReservationOrder : singleOrder)
            {
              // java.lang.ClassCastException is thrown here $PlannedOrder cannot be cast to java.util.ArrayList

I think your problem is this line:我认为你的问题是这一行:

reservedOrders.addAll(plannedOrders);

It seems that you're expecting the plannedOrders list itself to be added to the reservedOrders list.您似乎希望将plannedOrders列表本身添加到reservedOrders列表中。 But that's not what this does.但这不是这样做的。 This adds each element IN plannedOrders to the reservedOrders list.这会将每个元素plannedOrders添加到reservedOrders列表中。 I think what you want instead is:我认为你想要的是:

reservedOrders.add(plannedOrders);

This will cause the plannedOrders list to be added to the reservedOrders list, giving you the nested structure that you're expecting.这将导致将plannedOrders列表添加到reservedOrders列表中,从而为您提供您所期望的嵌套结构。

Why are you not properly defining the type of objects that are contained in reservedOrders ?为什么您没有正确定义reservedOrders中包含的对象类型? If you did this, the compiler would then catch this error and so you wouldn't need to wait for a runtime error.如果你这样做了,编译器就会捕捉到这个错误,所以你不需要等待运行时错误。 I think what you want is:我想你想要的是:

final List<List<PlannedOrder>> reservedOrders = new ArrayList<>();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM