Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 根据值对树映射进行排序?_Java_Android - Fatal编程技术网

Java 根据值对树映射进行排序?

Java 根据值对树映射进行排序?,java,android,Java,Android,我有一个树映射,其中包含以下键/值: private ArrayList<TreeMap<String,String>> mList = new ArrayList<TreeMap<String,String>>(); TreeMap<String,String> item = new TreeMap<String,String>(); item.put("FirstName", strFirstNa

我有一个树映射,其中包含以下键/值:

    private ArrayList<TreeMap<String,String>> mList = new ArrayList<TreeMap<String,String>>();
    TreeMap<String,String> item = new TreeMap<String,String>();
    item.put("FirstName", strFirstName);  
    item.put("LastName", strLastName);
    item.put("Country", strCountry);
    mList.add( item );
private ArrayList mList=new ArrayList();
树映射项=新树映射();
项目名称(“FirstName”,strFirstName);
项目名称(“LastName”,strLastName);
项目.付诸表决(“国家”,strCountry);
列表添加(项目);
添加所有项目后,如何根据“LastName”键下存储的值对树映射进行排序?我希望有一个树状图,其格式与原始列表相同,但应用了上述排序:

“詹姆斯”、“阿米什”、“美国”
“查尔斯”、“布伦特伍德”、“美国”
“杰克”、“康奈尔”、“美国”
“艾米”、“邓恩”、“美国”
“梅琳达”、“埃利斯”、“加拿大”

我发现了一个类似的问题,关于在“常规”Java中按值对树映射进行排序,但代码对我不起作用-我不知道是因为Android的特殊性还是因为我无法调整它以满足我的需要:-/

谢谢,

尼克

听起来你好像在尝试对包含树形图的数组列表进行排序,对吗? 如果是这样,以下内容应适合您的需要:

Collections.sort(mList, new Comparator<TreeMap<String, String>>(){
    public int compare(TreeMap<String, String> left, TreeMap<String, String> right) {
        return left.get("LastName").compareTo(right.get("LastName"));
    }
});
Collections.sort(mList,newcomparator(){
公共整数比较(左树状图,右树状图){
返回left.get(“LastName”).compareTo(right.get(“LastName”));
}
});

需要注意的是,使用树状图来包含名称/值对列表可能不是必需的-我只需要创建一个类来保存值。

听起来好像您正在尝试对包含树状图的ArrayList进行排序,对吗? 如果是这样,以下内容应适合您的需要:

Collections.sort(mList, new Comparator<TreeMap<String, String>>(){
    public int compare(TreeMap<String, String> left, TreeMap<String, String> right) {
        return left.get("LastName").compareTo(right.get("LastName"));
    }
});
Collections.sort(mList,newcomparator(){
公共整数比较(左树状图,右树状图){
返回left.get(“LastName”).compareTo(right.get(“LastName”));
}
});

需要注意的是,使用树映射来包含名称/值对列表可能不是必需的-我只需要创建一个类来保存值。

我没有为android编程,但我认为没有任何区别。树映射总是被排序的,事实上,如果它不能排序,它将抛出一个
异常。无论如何,因为您使用的是字符串,所以它们将按
自然
顺序排序,这对于
字符串
类上的
可比
的实际实现来说确实是一个花哨的词,它只是按字母顺序排序

如果您希望它以任何其他方式对其进行排序,则有一个
TreeMap
的构造函数,它接收一个
比较器
,其中只有一种方法可以实现,即
compare
,在这里您可以指定所需的排序


希望能有所帮助。

我还没有为android编程,但我认为没有任何区别。树映射总是被排序的,事实上,如果它不能排序,它将抛出一个
异常。无论如何,因为您使用的是字符串,所以它们将按
自然
顺序排序,这对于
字符串
类上的
可比
的实际实现来说确实是一个花哨的词,它只是按字母顺序排序

如果您希望它以任何其他方式对其进行排序,则有一个
TreeMap
的构造函数,它接收一个
比较器
,其中只有一种方法可以实现,即
compare
,在这里您可以指定所需的排序


希望这会有所帮助。

当键是比较的值时,按值对树形图排序是错误的。如果您想要排序的列表,请使用TreeSet而不是TreeMap。

当键是比较的键时,按值对TreeMap排序是错误的。如果您想要排序的列表,请使用TreeSet而不是TreeMap。

Android没有什么特别之处可以阻止您对TreeMap进行排序。发布您的排序代码,以便我们可以查看它。为什么不创建一个具有这些属性的对象并将其存储在ArrayList中?为此使用树映射非常昂贵。此外-“排序映射的行为是定义良好的,即使其顺序与equals不一致;它只是无法遵守映射接口的一般约定。”如果使用比较器确定排序值,它将其用于map.contains()还有,跳过你的equals/hash。Android没有什么特别的地方可以阻止你对树映射进行排序。发布您的排序代码,以便我们可以查看它。为什么不创建一个具有这些属性的对象并将其存储在ArrayList中?为此使用树映射非常昂贵。此外-“排序映射的行为是定义良好的,即使其顺序与equals不一致;它只是无法遵守映射接口的一般约定。”如果使用比较器确定排序值,它将其用于map.contains()以及跳过您的equals/hashsee我对问题的评论-TreeMap使用该比较器来确定map.contains(),我认为这有点像nasty@Dstarh我不知道,但我知道这是个问题,在我看来,这使得treemap不值得使用参见我对这个问题的评论-treemap使用这个比较器来确定map.contains(),在我看来这有点像nasty@Dstarh我不知道,但我知道这是一个问题。总的来说,在我看来,这使得treemap不值得经常使用,这非常有效!我知道TreeMap中的TreeMap不是一个非常有效的结构,我最初有一些更简单的东西,但是读到TreeMap是默认排序的,所以我将两者都改为TreeMap,以查看是否随后对值进行排序,它们显然不是:-)!现在我可以把它换回来了!再次感谢你的帮助!非常感谢,这非常好用!我知道TreeMap中的TreeMap不是一个非常有效的结构,我最初有一些更简单的东西,但是读到TreeMap是默认排序的,所以我将两者都改为TreeMap,以查看是否随后对值进行排序,它们显然不是:-)!现在我可以把它换回来了!Th