我正在尝试按字母顺序对地图列表重新排序。我可以看到“名称”字符串已填入适当的值,但groupDataCopy从未更新。据我所知,使用new运算符并调用“ put”会将值放置在Map中。但是我可以看到,在下面的迭代中,ArrayList包含:

 {name = null}


我不知道为什么我会在地图列表中丢失值。这是代码:

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 - Java HashMap在循环迭代中失去值(value),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5822572/

10-11 10:47