繁体   English   中英

排序ArrayList哈希图

[英]Sorting ArrayList Hashmap

我有一个ArrayList<HashMap<String,String>> ,我想对其进行排序。 我在Logcat中的ArrayList输出是这样的:

[{num=0, username=p, startPoliPro=A,  finalPoliPro=B, diff=0},
 {num=1, username=e, startPoliPro=C,  finalPoliPro=D,  diff=548.0Km},
 {num=2, username=e, startPoliPro=E,  finalPoliPro=F, diff=3.0Km}]

我想按升序对基于“ diff”值的列表进行排序,以便Logcat必须像这样:

[{num=0, username=p, startPoliPro=A,  finalPoliPro=B, diff=0},
 {num=2, username=e, startPoliPro=E,  finalPoliPro=F, diff=3.0Km},
 {num=1, username=e, startPoliPro=C,  finalPoliPro=D,  diff=548.0Km}]

我读过许多类似的主题,并尝试过类似

Collections.sort(final_itinList, new Comparator<HashMap< String,String >>() {

    @Override
    public int compare(HashMap<String, String> lhs, HashMap<String, String> rhs) {
        // Do your comparison logic here and retrn accordingly.
        return lhs.get("diff").compareTo(rhs.get("diff"));                      
    }
});

没有成功。 任何帮助,将不胜感激

当前,您正在尝试比较两个String对象:

return lhs.get("diff").compareTo(rhs.get("diff"));

您真正想要做的是比较返回的Integer,因此您需要执行以下操作:

return (Integer.parseInt(lhs.get("diff")) - Integer.parseInt(rhs.get("diff")));

您的比较器正在比较两个字符串。 这可能就是为什么列表未正确排序的原因。 “ diff”字符串应解析为整数(或浮点数)以进行比较。

如果您的对象始终具有相同的结构,则建议您创建一个自定义对象的列表(其中diff是表示公里数的整数),而不要使用“地图列表”。 在这种情况下,您可以使自定义对象实现Comparable。

就像是 :

public class MyCustomObject implements Comparable<MyCustomObject> {

    private String mNum;

    private String mUsername;

    private String mStartPoliPro;

    private String mFinalPoliPro;

    private int mDiff;

    @Override
    public int compareTo(MyCustomObject another) {
        return mDiff - another.getDiff();
    }

    public String getNum() {
        return mNum;
    }

    public void setNum(String num) {
        mNum = num;
    }

    public String getUsername() {
        return mUsername;
    }

    public void setUsername(String username) {
        mUsername = username;
    }

    public String getStartPoliPro() {
        return mStartPoliPro;
    }

    public void setStartPoliPro(String startPoliPro) {
        mStartPoliPro = startPoliPro;
    }

    public String getFinalPoliPro() {
        return mFinalPoliPro;
    }

    public void setFinalPoliPro(String finalPoliPro) {
        mFinalPoliPro = finalPoliPro;
    }

    public int getDiff() {
        return mDiff;
    }

    public void setDiff(int diff) {
        mDiff = diff;
    }
}

然后简单地打电话

List<MyCustomObject> myList = // create your object list
Collections.sort(myList);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM