代码之家  ›  专栏  ›  技术社区  ›  Mtullis

在我的表单值中循环遍历数组[重复]

  •  -1
  • Mtullis  · 技术社区  · 6 月前

    我正试图使用表单中的数据值在更新服务中创建一个数组。我想将此数组与数据库中当前的值数组进行比较,以决定是需要插入新ID还是删除不再需要的ID。但我无法从我的实体中获取值数组

    值实体正从我的表单传递到我的更新服务,如下所示 parameter 所以如果我做 .toString() 对于整个实体,我可以看到一切,包括 materialIds ,但我似乎无法以其他方式展示它们。我之前被指示循环浏览 材料ID 并在服务中创建一个新的数组,为我提供一对数组,以便更容易地相互比较。

    我试图这样做,但我一直收到这样的信息:

    The method add(Long) in the type List<Long> is not applicable for the arguments (List<Long>)

    以下是我表单中的数据结构:

    {
      "id": 1,
      "name": "ParameterName",
      "materialIds": [
        11,
        12,
        13
      ],
    
    }
    

    **以下是我所尝试的:**

    List<Long> formMaterialIds = new ArrayList<Long>();
    
    for (int i = 0; i < parameter.getMaterialIds().size(); i++) {
    
        formMaterialIds.add(parameter.getMaterialIds());
    }
    
    

    我真的不知道还能怎么做。有人能教我怎么做吗?我想我真的很接近,但我错过了一些东西。

    1 回复  |  直到 6 月前
        1
  •  1
  •   rzwitserloot    6 月前

    您正在呼叫 add a方法 List<Long> ,这意味着编译器希望您传递一个类型为的表达式 Long 对此。但这不是你在做的:你在传递一个列表。

    所以,你有一个多头列表,你想添加 所有这些 到另一个列表。你可以这样做,但该方法名为 addAll .

    您有:

    for (int i = 0; i < parameter.getMaterialIds().size(); i++) {
        formMaterialIds.add(parameter.getMaterialIds());
    }
    

    因此,您正在遍历此列表中的每个元素,并尝试为每个元素添加 整个列表 这是不对的。

    其中任何一个都很好:

    // obviously, this is preferred; much simpler.
    formMaterialIds.addAll(parameter.getMaterialIds());
    
    // this is rather old in style and a bit problematic, this works but isn't nice.
    for (int i = 0; i < parameter.getMaterialIds().size(); i++) {
        formMaterialIds.add(parameter.getMaterialIds().get(i));
    }
    
    // this is _a lot_ simpler
    for (Long materialId : parameter.getMaterialIds()) {
        formMaterialIds.add(materialId);
    }