Java中两个列表<String>的有效交集?
问题很简单:
我有两张单子
List<String> columnsOld = DBUtils.GetColumns(db, TableName);
List<String> columnsNew = DBUtils.GetColumns(db, TableName);
我需要得到这些的交叉点。有没有快速的方法来实现这一点
你可以在下面搜索框中键入要查询的问题!
问题很简单:
我有两张单子
List<String> columnsOld = DBUtils.GetColumns(db, TableName);
List<String> columnsNew = DBUtils.GetColumns(db, TableName);
我需要得到这些的交叉点。有没有快速的方法来实现这一点
# 1 楼答案
使用谷歌的Guava库:
注意:这比简单地使用两个列表进行交集要有效得多:它是O(n+m),而list version是O(n×m)。有200万个项目列表,这是数百万次操作和万亿次操作之间的差异
# 2 楼答案
怎么样
# 3 楼答案
由于retainAll不会触及参数集合,因此速度会更快:
交点将是列new中留下的值。删除columnsOld中已比较的值将减少所需的比较次数
# 4 楼答案
您可以使用^{} 方法:
# 5 楼答案
流有一种很好的方法,它可以在一行代码中实现这一点,您可以创建两个不同类型的列表,这是ContainesAll方法afaik无法实现的:
不同类型列表的示例。如果您在foo和bar之间有关联,并且您可以从foo获得bar对象,那么您可以修改流:
# 6 楼答案
如果不关心事件,则使用retainAll,否则使用N.intersection
N是abacus-common中的一个实用类