java - 遍历对象(组)列表的优化解决方案,每个对象都有对象列表,我需要应用继承
问题描述
我正在寻找一种优化的解决方案来遍历我需要应用继承的对象(组)列表:
例如 :
4级:
[Group 1 , group 2 , group 1] ---> each Group [BankArray] ---> each BankArray [obj 1 ,obj2 ,obj 2]
Same for level 3
Same for level 2
Same for level 1
而且每个组不仅有BankArray,还有bankDetail对象。
所有级别的结构相同。
我需要做的:取第一个对象 obj 1 并遍历所有其他级别的列表,看看是否有任何对象(相同的货币和相同的 operationType(与其他属性无关)),如果我发现相似性应该删除这个对象从我找到它的第 3 层或第 2 层或第 1 层。
所以这一步从 4 到 3。4 到 2。3 到 1。
然后将在更新后从第 3 级开始下一步(删除重复项):
3 与 2 3 与 1
然后将在更新后从第 2 级开始下一步(删除重复项):
2 与 1
我正在考虑一些解决方案来完成这 3 个解决方案但不完整,第一个解决方案:使用循环然后从列表中删除重复项 it self() 我不知道是否可能:而且这只在 4 到 3 之间
for (BankGroup bankGroup4 : bankGroupArrayL4) {
for(BankDetail four :bankDetailLinkageGroup4.getBankDetailArray() ) {
for (BankDetailLGroup bankDetailGroup3 : bankDetailGroupArrayL3) {
for(BankDetail three :bankDetailGroup3.getBankDetailArray() ) {
if(four.getPymtCrryCd().equals(three.getPymtCrryCd()) && four.getOprnTyp().equals(three.getOprnTyp())) {
bankDetailLGroup3.getBankDetailArray().remove(three);
}
}
解决方案 2:未完成并给我转换错误,但我们谈论它本身的逻辑:
Boolean l4 = (!bankDetailLinkageGroupArrayL4.isEmpty() && bankDetailLinkageGroupArrayL4 != null);
Boolean l3 = (!bankDetailLinkageGroupArrayL3.isEmpty() && bankDetailLinkageGroupArrayL3 != null);
Boolean l2 = (!bankDetailLinkageGroupArrayL2.isEmpty() && bankDetailLinkageGroupArrayL2 != null);
Boolean l1 = (!bankDetailLinkageGroupArrayL1.isEmpty() && bankDetailLinkageGroupArrayL1 != null);
if (l4) {
List<BankDetailLinkage> objectsL4 = bankDetailLinkageGroupArrayL4.stream()
.flatMap(a -> a.getBankDetailLinkageArray().stream())
.collect(Collectors.toList());
if (l3) {
List<BankDetailLinkage> objectsL3 = bankDetailLinkageGroupArrayL3.stream()
.flatMap(a -> a.getBankDetailLinkageArray().stream())
.filter(two -> objectsL4.stream()
.anyMatch(one -> one.getPymtCrryCd().equals(two.getPymtCrryCd())&&
two.getOprnTyp().equals(one.getOprnTyp())
.collect(Collectors.toList()));
}
}
解决方案 3:仅创建一种方法但未完成:
private void deleteOrAdd(List<BankDetailLinkageGroup> bankDetailLinkageGroupArrayA,
List<BankDetailLinkageGroup> bankDetailLinkageGroupArrayB, Set<BankDetailLinkage> blackList) {
if (bankDetailLinkageGroupArrayB.isEmpty() && bankDetailLinkageGroupArrayB == null) {
for (BankDetailLinkageGroup bankDetailLinkageGroup : bankDetailLinkageGroupArrayA) {
for (BankDetailLinkage bankDetailLinkage : bankDetailLinkageGroup.getBankDetailLinkageArray()) {
if (blackList.isEmpty() && blackList == null) {
blackList.add(bankDetailLinkage);
} else {
// compare with blackList
for (BankDetailLinkage bankDetailLinkageBlackList : blackList) {
if (bankDetailLinkage.getPymtCrryCd().equals(bankDetailLinkageBlackList.getPymtCrryCd())
&& bankDetailLinkage.getOprnTyp().equals(bankDetailLinkageBlackList.getOprnTyp())) {
bankDetailLinkageGroup.getBankDetailLinkageArray().remove(bankDetailLinkage);
}
}
}
}
}
} else {
// compare a with b and with blackList
}
}
我怎样才能找到解决方案?
解决方案
推荐阅读
- sql - 在 SQL 语句中使用 where 和 date 的问题
- jsf - 是否可以使用 p:printer (或其他方法)打印由 primefaces 扩展生成的 QR 码
- javascript - 尝试使用 html 和 javascript 显示模式,但单击后没有显示
- firebase - Firestore 使用管理员在本地运行函数
- ios - 我们可以更改 iOS 应用的自动续订订阅计划的开始日期吗?
- swift - 如何将焦点放在文本字段上?
- android - 例如,如何关闭和应用程序。减少 20 分钟
- python-3.7 - 我正在尝试在 python 中创建 cookie 点击器。我已经实现了一个自动点击器,但是,每次我点击它都会添加另一个自动点击器
- html - css网格上没有边距/填充底部?
- php - 如何使用 Laravel 5 将嵌套对象插入 MongoDB?