这是我的2个清单上有超过百万的项目。两者都具有相同ID的相同项。ID在字符串中。我只需要一个不一样的ID的项目。我是这样做的。但我确信一定有更好的解决办法,而且具有高度的持久性:-
List<Transaction> differentList = new ArrayList<>();
for(Transaction tx : foundTransactions ){
for(Transaction aTx : ArchivedTransactions)
{
if(!tx.getId().equalsIgnoreCase(aTx.getId()) ){
differentList .add(tx);
}
}
}
我尝试使用流,但我做不到。我想用流API应该更好。请建议我有什么改进之处。
您可以先尝试将其转换为hashmap
,如下所示:
Set<String> collect = ArchivedTransactions.stream().map(i -> i.getId().toLowerCase())
.collect(Collectors.toSet());
for(Transaction tx : foundTransactions )
if(!collect.contains(tx.getId()))
differentList.add(tx);
Collectors.toset()
返回散列集
。您可以将代码简化为:
Set<String> collect = ArchivedTransactions.stream().map(i -> i.getId().toLowerCase())
.collect(Collectors.toSet());
List<Transaction> differentList = foundTransactions.stream()
.filter(tx -> !collect.contains(tx.getId()))
.collect(Collectors.toList())
首先将ID
添加到hashset
中作为中间步骤,将为您提供更好的总体复杂性时间,因为(源代码):
HashSet操作的时间复杂性:HashSet的底层数据结构是Hashtable。因此,对哈希集的add、remove和look-up(contains method)操作的摊销(平均或通常情况)时间复杂度需要O(1)次。
因此,“hashmap”
解决方案的总体时间复杂性
将为O(N+M)
,其中N
和M
分别从列表ArchivedTransactions
和FoundTransactions
中的元素数开始。尽管如此,space-wise
您将为拥有这种额外的结构付出代价。
您的解决方案space-wise
更好,但时间复杂度最差。如果N=m
则解决方案的时间复杂度为O(N^2)
,而具有哈希集
的解决方案将为O(2N)
,因此为O(N)
。这是一个巨大的差异。
做的只是
Set<Transaction> result = new LinkedHashSet<>();
result.addAll(foundTransactions);
result.addAll(ArchivedTransactions);
光靠自己是不行的,因为你明确要求:
!tx.getId().equalsIgnoreCase(aTx.getId())
问题内容: 我有一套文件,例如 如标题中所述:是否可以使用Nest过滤包含给定标签的所有文档? 例如,上面的记录将匹配[‘c’,’d’] 还是应该手动构建多个“ OR”? 问题答案: 编辑:下面的位集可能是有趣的读物,但答案本身有点过时。 其中一些功能在2.x中有所变化。Slawek还在另一个答案中指出,在这种情况下,查询是使搜索干燥的一种简便方法。最后重构为当前最佳实践。—nz 您可能需要带有子
问题内容: a = [1,1,1,2,3,4,4] >>> b = [1,1,2,3,3,3,4] 请注意,这不是一个相同的问题: 两个列表的Python交集保持重复 因为即使列表a中有三个1,列表b中也只有两个,所以结果应该只有两个。 问题答案: 您可以使用此方法,当您使用交叉路口时,它将为每个元素提供在任一列表中找到的最低计数。 输出 :
问题内容: 我正在为Java中的ERP系统进行定制。在我的定制中,我想使用Apache POI 3.10.1。因此,我集成了jars poi-3.10.1-20140818.jar和poi-ooxml-3.10.1-20140818.jar。 但是,这些jar包含几个类,这些类已经包含在ERP系统的核心代码中,但是有所不同。 如果核心ERP类覆盖POI类,则定制将引发运行时异常。如果POI类覆盖核
问题内容: 语境 我正在为该类编写一个简单的 JUnit 测试。 阿可以从静态工厂方法,需要一个可变参数的创建 字符串 。 在的存在期间的任何时间,客户端可以检查它通过在的形式创建的参数 列表 ,通过方法。 换句话说,a 既记住并公开了使之成为现实的参数列表。有关此合同的更多详细信息: 的顺序将与为对象创建选择的顺序相同 允许重复的后续 String 组件并按顺序保留 行为未定义(其他代码保证没有
问题内容: 这个问题已经在这里有了答案 : 循环“忘记”以删除一些项目[重复] (10个答案) 6年前关闭。 我想从列表“ a”中删除项目,其中列表“ b”包含在列表“ a”中找到带有单词的项目 结果应为: 这是因为在列表“ a”的项目中找到了单词“二”和“五六”。 这是我尝试解决的方法: 返回: 为什么这不起作用,如何解决此问题? 谢谢。 问题答案: 遍历列表时,请勿修改列表。这样做会产生不良的
本文向大家介绍Python中包含重复项的两个列表的区别,包括了Python中包含重复项的两个列表的区别的使用技巧和注意事项,需要的朋友参考一下 有时我们需要找出两个列表之间的差异。这还将意味着数学减法,其中如果第二列表中存在元素,则将其从第一列表中删除。重复项将保留。以下是我们可以实现此目标的方法。 我们可以使用collections模块中的Counter方法,该方法将跟踪元素的计数。直接的数学减