我有两个ArrayList,它再次包含Hardware类型的ArrayLists:
private ArrayList<ArrayList<Hardware>> list1;
private ArrayList<ArrayList<Hardware>> list2;
类Hardware包含一个ElementType枚举,它确定硬件的类型:
enum ElementType{
Microcontroller;
Core;
Memory;
Sensor;
Pin;
Port;
}
list1的示例,其中包含3个类型为Hardware的ArrayList:
[Microcontroller, Memory]
[Port]
[Pin]
list2的示例,其中包含6个类型为Hardware的ArrayList:
[Microcontroller, Memory]
[Microcontroller, Memory]
[Microcontroller, Port]
[Microcontroller, Core]
[Sensor]
[Pin]
现在我想检查列表1中的所有ArrayList是否都包含在list2中并且具有相同的顺序:
这是有效的:
[Microcontroller, Memory, Core] == [Microcontroller, Memory, Core]
虽然这个订单不一样,因此无效:
[Microcontroller, Memory, Core] == [Microcontroller, Core, Memory]
最后,我需要知道list1的所有ArrayList在list2中是否也是相同的顺序,list2中的哪一个是它。
我已经捣乱了一段时间,因为我不知道如何使用Collection的辅助方法来实现这一点,而且我对使用循环的第一个想法非常糟糕并没有帮助我:
private void check() {
for (ArrayList<Hardware> listOf1 : list1) {
for (Hardware abstHw : listOf1) {
System.out.println(abstHw);
????????????
}
}
}
任何人都可以帮我这个或给我一些方便的提示吗?
干杯, 菲尔
------------------编辑---------------
只是为了澄清:
list1和list2的硬件实例不一样!它们只能通过ElementType进行比较。
答案 0 :(得分:0)
你知道,你想要的实际上非常简单:
private void check() {
return list2.containsAll(list1);
}
事实上,如果这很简单,你可能不需要单独的方法。
答案 1 :(得分:-1)
您可以使用List#retainAll()
:
private ArrayList<ArrayList<Hardware>> list1;
private ArrayList<ArrayList<Hardware>> list2;
list2.retainAll(list1);
交叉点中的元素列表(list2
之后的List#retainAll()
)是您正在寻找的。如果两个内部列表具有相同的对象,但顺序不同,则不会被视为相同,因此您没有明确担心这一点。
注意:List#retainAll()
将修改实际的list1
对象。如果您需要保留它,请在执行此操作之前进行复制。