java - 从Java中的多个列表中获取所有重复值
问题描述
我想从多个整数列表中获取所有重复的值。令人困惑的部分是这些整数列表位于 Map 的 Map 中,例如 LinkedHashMap<String, LinkedHashMap<String, List>> 流
// sample value
{
break_desc100=
{
bDesc_1000=[62, 72, 82, 92, 102, 112, 122],
bDesc 1001=[180, 190, 200, 210, 220, 230, 240],
cMessage_1000=[112],
cMessage_1001=[232]
}
}
// for this one I want to get 112
到目前为止,我尝试使用retainAll,但如果重复的列表不相邻,我的代码将不起作用。
for (Map.Entry<String,LinkedHashMap<String,List<Integer>>> entry : streams.entrySet()) {
String currentStream = entry.getKey();
LinkedHashMap<String,List<Integer>> bDescList = entry.getValue();
for (Map.Entry<String,List<Integer>> bDesc : bDescList.entrySet()) {
if (firstIteration) {
prevBDesc = bDesc;
firstIteration = false;
} else {
List<Integer> currentList = prevBDesc.getValue();
List<Integer> nextList = bDesc.getValue();
duplicates = new ArrayList<Integer>(currentList);
duplicates.retainAll(nextList);
allDuplicates.addAll(duplicates); //Set<Integer>
prevBDesc = bDesc;
}
}
}
编辑:对不起,我忘了补充说它是在 Java 1.5 上运行的。
解决方案
编辑
这假设您正在寻找任何重复的值。这包括在同一列表中查找重复项。如果我误解了这个问题,请纠正我。
您可以在 O(N) 时间和 O(N) 空间中执行此操作,方法是在计算每个整数出现的同时遍历嵌套散列。然后我们可以过滤出不止一次出现的整数。
Map<String, List<Integer>> innerMap = new HashMap<>();
innerMap.put("bDesc_1000", Arrays.asList(62, 72, 82, 92, 102, 112, 122));
innerMap.put("bDesc_1001", Arrays.asList(180, 190, 200, 210, 220, 230, 240));
innerMap.put("cMessage_1000", Collections.singletonList(112));
innerMap.put("cMessage_1001", Collections.singletonList(232));
Map<String, Map<String, List<Integer>>> map = new HashMap<>();
map.put("break_desc100", innerMap);
Map<Integer, Integer> occurrenceMap = new HashMap<>();
map.forEach((outerKey, outerValue) -> {
outerValue.forEach((innerKey, innerValue) -> {
innerValue.forEach((element -> occurrenceMap.merge(element, 1, Integer::sum)
));
});
});
List<Integer> duplicates = occurrenceMap.entrySet().stream()
.filter(e -> e.getValue() > 1)
.map(Map.Entry::getKey)
.collect(Collectors.toList());
System.out.println(duplicates);
输出
[112]
推荐阅读
- debugging - 如何在内存中扫描 LLDB 中的十六进制值数组?
- c++ - 以编程方式构建 clang AST
- javascript - IOS 真实设备无法连接到 AWS 上的 HTTPS 服务器
- labview - 如何设置簇数组的tab顺序,簇元素在LabVIEW中具有不同的数据类型?
- python - 在具有给定位置坐标的节点图中设置边标签的问题
- c# - 通过 nvidia quadro 600 gpu 模式访问时 C# DOT NET 应用程序崩溃 - nvd3dum.dll 崩溃
- php - 如何从PHP中的文本中提取名称
- c++ - 如何让我的编译器更愚蠢(错误的索引)?
- html - sed 命令处理输入流并用标签替换所有HTML标签
- angular - selectionChange 不会为 mat-select 中的默认选项发出 - Angular Material