Java HashMap 在循环迭代中丢失值

标签 java android dictionary hashmap

我正在尝试按字母顺序重新排列 map 列表。我可以看到“名称”字符串被填充为适当的值,但 groupDataCopy 从未更新。据我所知,使用 new 运算符并调用“put”会将值放入 M​​ap 中。但我可以看到在接下来的迭代中,ArrayList 包含:

 {name = null}

我不知道为什么我的 map 列表中的值丢失了。这是代码:

private void sortByName() {
    List<Map<String, String>> groupDataCopy = new ArrayList<Map<String, String>>();
    List<List<Map<String, String>>> childDataCopy = new ArrayList<List<Map<String, String>>>();
    int groupPos = 0;
    int nextNamePos = 0;
    String name = null;

    while(groupPos<groupData.size()) {
        //main loop
        int groupDataComparison = 0;
        name = null;

        while(groupDataComparison<groupData.size()) {
            //comparison traversal for group
            if(!groupDataCopy.isEmpty()) {  //if groupDataCopy has data
                if(groupDataCopy.get(groupDataCopy.size()-1).get("name").compareTo(groupData.get(groupDataComparison).get("name")) > 0) {   //if the last index of groupDataCopy is alphabetically after (or equal to) last chosen name
                    if(name==null || groupData.get(groupDataComparison).get("name").compareTo(name) < 0) {
                        name = groupData.get(groupDataComparison).get("name");
                        nextNamePos = groupDataComparison;
                    }
                }
            } else {
                if(name==null || groupData.get(groupDataComparison).get("name").compareTo(name) < 0) {
                    name = groupData.get(groupDataComparison).get("name");
                    nextNamePos = groupDataComparison;
                }
            }
            groupDataComparison++;
        }
        groupDataCopy.add(new HashMap<String, String>());
        groupDataCopy.get(groupPos).put("name", name);
        childDataCopy.add(new ArrayList<Map<String, String>>());
        for(Map<String, String> data : childData.get(nextNamePos)) {
            childDataCopy.get(groupPos).add(data);
        }
        groupPos++;
    } 

    groupData = groupDataCopy;
    childData = childDataCopy;
}

最佳答案

Comparator<Map<String, String> comparator = new Comparator<Map<String, String>()
{
    public int compare(Map<String, String> o1, Map<String, String> o2) 
    {
        return o1.get("name").compartTo(o2.get("name");
    }
}

Collections.sort(groupData, comparator);

关于Java HashMap 在循环迭代中丢失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5822572/

相关文章:

java - Cassandra read_request_timeout_in_ms 为外部(客户端)请求设置

java - Java中的奇怪错误

java - Intent 导致 Android 应用程序强制关闭(O'reilly 视频教程)

android - 如何使用 Cmake 将 Android 项目与 libandroid 链接起来?

java - 通过 ObjectOutputStream 发送相同但已修改的对象

java - 将错误堆栈发送到方法

android - (UNITY3d android 游戏)当我不触摸屏幕时,我的 fps 比我触摸时低

python - 如果键相等则合并两个字典

java - 这是将 Java 映射转换为 native Clojure 映射以进行排序的最佳方法吗?

c++ - 字典可以在c++中使用吗