高手你好,我想请教一个关于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 展开
"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 展开
1个回答
展开全部
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;
}
});
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询