有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何检索存储在映射值中的对象?

Set<Entry<Integer, InventoryStock>> inventoryData=
Set<Map.Entry<Integer,InventoryStock>>) ois.readObject(); 
 for( Entry<Integer, InventoryStock> list:inventoryData) {
             for(InventoryStock stock:list) 
            if(stock!=null){
            System.out.println("Item id" + stock.getItemID()+"  "+stock);
             map.putIfAbsent(stock.getItemID(), stock);
              } 

我正在从.ser文件中拾取inventoryData集,现在我需要访问映射的值(即inventorystock对象),并需要将其分配给另一个映射。在第二个增强for循环中显示错误:

error: Can only iterate over an array or an instance of java.lang.Iterable in 2nd for loop

请帮我修复这个代码


共 (3) 个答案

  1. # 1 楼答案

    你的变量

    list
    

    (本例中的名称具有误导性)不是容器-您无法遍历它。 试试这样

    for( Entry<Integer, InventoryStock> listItem:inventoryData) {
      InventoryStock myStock = listItem.getValue();
      if (...) {
        //
      }
    }
    
  2. # 2 楼答案

    Entry<Integer, InventoryStock>
    

    只是一对(键、值),不可编辑。如果你的InventoryStock是可迭代的,你必须先从你的条目中得到它InventoryStock是一个值,所以使用方法entry.getValue()获取它:

    for( Entry<Integer, InventoryStock> entry :inventoryData) {
                 for(InventoryStock stock: entry.getValue())
    
  3. # 3 楼答案

    不能迭代Entry。一个Entry是一对(key, value),所以要从Entry中得到(单数)InventoryStock,必须使用getValue

    for( Entry<Integer, InventoryStock> entry : inventoryData) {
        InventoryStock stock = entry.getValue();
        if (stock != null) {
            ...