java - 需要一双新的眼睛来弄清楚比较 map 中的值背后的逻辑

标签 java loops dictionary

问题

数据的格式为:

Map<String, Map<String, Integer>>

看起来像这样:

{"MilkyWay": {"FirstStar" : 3, "SecondStar" : 9 .... }, "Andromeda": {"FirstStar" : 10, "SecondStar" : 9 .... } }

我想在快速循环中比较 Star 值,因此我想比较 MilkyWayFirstStar 的整数值和 Andromeda,如果值相同或不同,则返回 truefalse。因为这张 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/

相关文章:

java - 如何在Android中获取应用程序数据目录

java - 在 Android 应用程序中使用 Google map 路线

r - 保存 R 中 for 循环产生的对象

python - 根据条件从嵌套字典中删除子字典

python - 处理像字典这样的对象

c++ - 访问 vector 中的 map : map<string, vector<map<string, vector<int>>>>

java - 查找JVM分配的内存

java - JSlider 从外部对象移动

java - 如何减少这个程序的执行时间

python - 使用 Pandas 通过列循环字典