带索引的java列表减法
假设我有一个这样的列表:
line value
0 Object0
1 Object1
2 Object2
3 Object3
4 Object4
5 Object5
现在,我有另一个包含[0,2,3]
(仅Integer
)的列表B,它基本上包含了我已经看过的对象的索引
我想得到列表C(它是索引[0,1,2,3,4,5]-[0,2,3]=[1,4,5]
):
line value
1 Object1
4 Object4
5 Object5
顺便说一句:我需要原始列表保持不变
我可以创建索引列表,然后删除B列表以获得C列表,但是有没有一种简单有效的方法直接获取对象
# 1 楼答案
使用流很容易解决,例如:
listA
和listB
保持原样# 2 楼答案
编辑:(因为我忘了您不希望更改原始列表):
因此,单行操作是有用的:
原则是:迭代对象,并将索引中未显示的对象保留在
indexesToAvoid
中,然后将它们收集到new List
:# 3 楼答案
生成一组从0到列表大小的索引,然后从另一个列表中删除索引,然后通过从原始列表中按索引选择对象来填充结果列表
以您的例子:
[0,1,2,3,4,5]
集[1,4,5]
集的集合中减去[0,2,3]
[1, 4, 5]
中的每个索引,从源列表中获取对象并放入结果列表中或者,创建原始列表的副本,并从副本中删除具有
[0,2,3]
索引的元素您可能还需要考虑改变包含^ {< CD2>}索引的数据结构,并以更一般的方式描述问题,而不必假定使用索引{^}索引列表,这可能会导致更优雅和高效的解决方案。p>