高手你好,我想请教一个关于ArrayList<Map<String, Object>>() 排序的问题,有两个条件。

map中有两个值需要排序,"type"这个是一个整数,先按它排序。"title"这个是一个字符串,然后在排序这个。下边我已经写好了"title"的排方法,注释掉的部分是只... map中有两个值需要排序,
"type" 这个是一个整数,先按它排序。
"title"这个是一个字符串,然后在排序这个。
下边我已经写好了"title"的排方法,注释掉的部分是只按"type"
但是现在需要满足两个条件排序,不知道怎么排,请教一下。

Collections.sort(mData, new Comparator<Map<String, Object>>() {

public int compare(Map<String, Object> o1, Map<String, Object> o2) {

int len1 = o1.get("title").toString().length();
int len2 = o2.get("title").toString().length();
for (int i = 0; i < (len1 < len2 ? len1 : len2); i++) {
if (o1.get("title").toString().charAt(i) == o2.get("title")
.toString().charAt(i)) {
continue;
}
return o1.get("title").toString().charAt(i)
- o2.get("title").toString().charAt(i);
}
return len1 == len2 ? 0 : (len1 < len2 ? -1 : 1);

// int map1value = (Integer) o1.get("type");
// int map2value = (Integer) o2.get("type");
//
// return map1value - map2value;
}
});
最后得到的效果是

type title
1 a
1 b
1 c
2 a
2 b
3 a
展开
 我来答
duoloniori
2014-10-31 · TA获得超过456个赞
知道小有建树答主
回答量:181
采纳率:0%
帮助的人:232万
展开全部
Collections.sort(maps, new Comparator<Map<String, Object>>() {
@Override
public int compare(Map<String, Object> o1, Map<String, Object> o2) {
int map1value = (Integer) o1.get("type");
int map2value = (Integer) o2.get("type");
int j = map1value - map2value;
if(0 == j) {
int len1 = o1.get("title").toString().length();
int len2 = o2.get("title").toString().length();
for (int i = 0; i < (len1 < len2 ? len1 : len2); i++) {
if (o1.get("title").toString().charAt(i) == o2.get("title")
.toString().charAt(i)) {
continue;
}
return o1.get("title").toString().charAt(i)
- o2.get("title").toString().charAt(i);
}
return len1 == len2 ? 0 : (len1 < len2 ? -1 : 1);
}
return j;
}
});
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式