从数组列表中删除项目,比较另一个数组列表中的项目

时间:2016-01-25 04:16:08

标签: java

我在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>();

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

我自己已经解决了这个问题,但是又宣布了两个数组列表,但是我不想声明额外的数组列表来实现这个需求......还有其他简洁的方法吗?

1 个答案:

答案 0 :(得分:0)

如果您使用的是Java 8,则removeIf方法为Collection

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上发布问题,那么值得研究和使用标准惯例,因为它们可以让读者更轻松。

相关问题