有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓 Java HashMap在循环迭代中丢失值

我正在尝试按字母顺序重新排列地图列表。我可以看到“name”字符串被适当的值填充,但是groupDataCopy从未更新过。据我所知,使用新操作符并调用“put”将把值放入映射中。但我可以在下面的迭代中看到,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;
}

共 (2) 个答案

  1. # 1 楼答案

    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);
    
  2. # 2 楼答案

    尝试创建一个可以使用集合的比较器。排序:

    比如:

    Comparator<Map<String, String> comp = new Comparator<Map<String, String>()
    {
        public int compare(Map<String, String> o1, Map<String, String> o2) 
        {
            //write code to compare values
        }
    }
    

    之后,你可以简单地做:

    Collections.sort(groupData, comp);