问题
数据的格式为:
Map<String, Map<String, Integer>>
看起来像这样:
{"MilkyWay": {"FirstStar" : 3, "SecondStar" : 9 .... }, "Andromeda": {"FirstStar" : 10, "SecondStar" : 9 .... } }
我想在快速循环中比较 Star
值,因此我想比较 MilkyWay
中 FirstStar
的整数值和 Andromeda
,如果值相同或不同,则返回 true
或 false
。因为这张 map 很大。
我的尝试
我想做这样的事情:
//GalaxyMap<String, <Map<String, Integer>>
for (Map<String, Integer> _starMap : GalaxyMap.values())
{
for (String _starKey : _starMap.keySet()){
//Can't quite think of the correct logic... and I'm tired...
}
}
我想让它尽可能短......我已经盯着这个有一段时间了,我正在绕着它转圈。
编辑
外键不同,内键相同
此外,由于这是来自服务器的响应,我不知道它的大小
最佳答案
为什么这需要一张 map 。如果您总是使用“FirstStar”、“SecondStar”等作为 key ,那么为什么不将其作为一个列表呢..
Map<String, List<Integer>>
然后你可以这样做:
public boolean compareGalaxyStar(String galaxyName, String otherGalaxyName, int star) {
List<Integer> galaxyStars = galaxyMap.get(galaxyName);
List<Integer> otherGalaxyStars = galaxyMap.get(otherGalaxyName);
return galaxyStars.get(star) == otherGalaxyStars.get(star);
}
注意:您需要进行一些验证以确保输入正确。
要为所有明星实现这一点,没有太大不同。
if(galaxyStars.size() == otherGalaxyStars.size()) {
for(int x = 0; x < galaxyStars.size(); x++) {
// Perform your comparisons.
if(galaxyStars.get(x) != otherGalaxyStars.get(x)) {
// Uh oh, unequal.
return false;
}
}
}
关于java - 需要一双新的眼睛来弄清楚比较 map 中的值背后的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23010661/