kan*_*ri3 9 java linkedhashmap java-8
我有一个LinkedHashMap的<String, List<T>>.我正在构建Map,所以也许有更好的方法来组织所有数据.
我试图获得具有共同列表的键,每个列表中至少有2个共同元素.
例如:
Map
----------------------
| Key | Values |
----------------------
| M1 | [A1, A3] |
| M2 | [A1, A2, A3] |
| M3 | [A1, A2] |
| M4 | [A2, A3] |
----------------------
Run Code Online (Sandbox Code Playgroud)
最后,我想有这个清单: [ [M2, M3], [M2, M4], [M1, M2] ]
我不知道如何将我的第一个条目的值与所有其他条目的值进行比较.依此类推,直到我到达地图的末尾(就像for列表的双循环一样).
我现在的解决方案(但我觉得可能有更好的方法)
List<String> keyList = new ArrayList<>(myMap.keySet());
for(int i = 0 ; i < keyList.size()-1 ; i++) {
String keyA = keyList.get(i);
List<T> valuesA = myMap.get(keyA);
for(int j = 1 ; j < keyList.size() ; j++) {
String keyB = keyList.get(j);
List<T> valuesB = myMap.get(keyB);
// compare both lists here
}
}
Run Code Online (Sandbox Code Playgroud)
使用地图的方式去?
现在,性能不是问题.但是让事情变得更顺畅总是会更好
您可以使用以下方法
1)迭代映射中每个键的值(这将是一个列表)
2)从上面迭代的下一个索引开始另一个迭代,直到结束
3)对于#1列表中的每个元素,使用 contains 方法检查它是否在#2列表中
a) Finish iterating list #3 as soon as two identical objects are found
b) Iterate list in #3 till last but one if no element one
c) Iterate list in #3 till last if one element found
Run Code Online (Sandbox Code Playgroud)
希望对您有帮助
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |