[英]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.