假设我有三个学生数组,A,B,C,它们在彼此之间是不唯一的(即A数组可能有一个学生,也可以在数组B中找到)。我正在寻找一种有效的方法来过滤这些数组,这样每个数组都是唯一的,从A开始,然后B,然后C(即数组A和B中的学生最终会出现在A列表中,并从B列表中删除,因为A在B之前)。如何在保留数组A、B、C数组的同时做到这一点。(也就是说,我不能把所有的学生都抛到一个集合中,因为这样他们就失去了与他们最初属于什么名单的联系)。
学生对象具有一个id属性,可用于排序/筛选。玩具问题只适用于3个列表(它可以扩展到更大的列表,这就是为什么我正在寻找最优的解决方案)。
A [1, 2, 3, 4]
B [5, 6, 1, 9]
C [3, 7, 5, 8]
Results
A [1, 2, 3, 4]
B [5, 6, 9] ->original order is preserved (i.e. 5 is before 6 which is before 9)
C [7, 8]发布于 2016-07-19 21:29:03
您所要做的就是创建一个保存所有唯一值的HashSet。
最后,您应该有所有唯一的列表,它们之间没有重复的数字。
发布于 2016-07-19 21:47:00
考虑到a, b, c是学生列表,并且学生类正确地实现了equals() (和hashCode()),您可以从后续列表中删除前面列表中出现的学生:
b.removeAll(a);
c.removeAll(a);
c.removeAll(b);留在名单上的学生的顺序当然保留下来。
https://stackoverflow.com/questions/38468708
复制相似问题