【问题标题】:remove items from array lists comparing item from another array list从数组列表中删除项目比较另一个数组列表中的项目
【发布时间】:2016-01-25 04:16:07
【问题描述】:

我在 java 包中有以下类

public class Pallet { ArrayList Cartons = new ArrayList(); }
public class Carton { Deliverydoc doc; }
public class Deliverydoc { String id; }

包内的main.java有如下数组列表:

ArrayList<Pallet> Pallets = new ArrayList<Pallet>();
ArrayList<Carton> Cartons = new ArrayList<Carton>();
ArrayList<Deliverydoc> Deliverydocs = new ArrayList<Deliverydoc>();

现在,给您的问题是:假设我在 Pallets 中有 3 个项目,在 Carton 数组列表中有 3 个项目,在 Deliverydocs 数组列表中有 2 个项目。
我必须将 Deliverydocs 数组列表中的每个“id”与 Cartons 数组列表匹配,如果 Cartons 数组不包含,则从 Cartons 数组列表中删除该项目。 对于 Deliverydocs 数组列表中的某些项目与 Pallets 数组列表不匹配,我必须删除托盘项目,因此其中的纸箱项目也会自动删除。

我自己解决了这个问题,但是通过声明另外 2 个数组列表,但我不想声明额外的数组列表来实现这个 reqmt..任何其他巧妙的方式?

【问题讨论】:

    标签: java


    【解决方案1】:

    如果您使用的是 Java 8,那么您有 removeIfCollection 方法:

    cartons.removeIf(carton -> deliverDocs.noneMatch(doc -> doc.id.equals(carton.doc.id)));
    

    我不太了解您对删除托盘的要求,因为它措辞不当。如果是“类似地删除托盘内的纸箱,然后删除没有纸箱的托盘”,则:

    pallets.forEach(pallet -> pallet.cartons.removeIf(/* as above */));
    pallets.removeIf(pallet -> pallet.cartons.isEmpty());
    

    顺便说一句,您使用的是非正统的命名约定和格式样式。如果您打算在 SO 上发布问题,则值得研究和使用标准约定,因为它们使读者更容易。

    【讨论】:

    • 非常感谢。如果它是 java 8,那就更容易了。我在 java 6 中,应该在它之前提到它。你能告诉我如何在java 6中处理这个问题吗?谢谢 - 安迪
    • 对于托盘上的糟糕措辞,给你。与托盘纸箱类似。
    猜你喜欢
    • 1970-01-01
    • 2015-04-18
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多