Java 包含字符串哈希映射的排序arraylist?
我有一个Java 包含字符串哈希映射的排序arraylist?,java,android,Java,Android,我有一个ArrayList,其中包含一些HashMap。每个HashMap都包含两对数字和两对名称,都是字符串格式。是这样的: h1: 我想按照以下规则对此类ArrayList进行排序: (h1.num1+h1.num2)>(h2.num1+h2.num2) 如果它们相等,那么比较将只应用于(h1.num1>h2.num1) 但是由于num1和num2是字符串,我无法进行这样的比较。顺便说一下,如果我将它们转换为int,那么我将面临一个通用错误。最后,如果我删除泛型 我在返回语句中遇到一个语法错
ArrayList
,其中包含一些HashMap
。每个HashMap
都包含两对数字和两对名称,都是字符串格式。是这样的:
h1:
我想按照以下规则对此类ArrayList
进行排序:
(h1.num1+h1.num2)>(h2.num1+h2.num2)
如果它们相等,那么比较将只应用于(h1.num1>h2.num1)
但是由于num1
和num2
是字符串,我无法进行这样的比较。顺便说一下,如果我将它们转换为int,那么我将面临一个通用错误。最后,如果我删除泛型
我在返回语句中遇到一个语法错误:无法从文件转换为int。
有什么想法吗
在下面的代码中,错误出现在return
语句中:
private void calcMedia() {
mediaStatsDetailsArrayList.addAll(app.mediaArrayList);
Collections.sort(mediaStatsDetailsArrayList, new Comparator <HashMap<String, String>>() {
@Override
public int compare(HashMap h1, HashMap h2) {
int sum1 = (Integer.parseInt((String) h1.get("noOfLikes")) + Integer.parseInt((String) h1.get("noOfComments")));
h1.put("sum", sum1);
int sum2 = (Integer.parseInt((String) h2.get("noOfLikes")) + Integer.parseInt((String) h2.get("noOfComments")));
h2.put("sum", sum2);
if (sum1 == sum2)
return ((Object) h1.get("noOfLikes")).compareTo((Object) h2.get("noOfLikes"));
return ((Object) h1.get("sum")).compareTo((Object) h2.get("sum"));
}
});
}
private void calcMedia(){
mediaStatsDetailsArrayList.addAll(应用程序mediaArrayList);
Collections.sort(mediaStatsDetailsArrayList,新的Comparator(){
@凌驾
公共int比较(HashMap h1、HashMap h2){
intsum1=(Integer.parseInt((String)h1.get(“noOfLikes”)+Integer.parseInt((String)h1.get(“noOfComments”);
h1.投入(“总和”,sum1);
intsum2=(Integer.parseInt((String)h2.get(“noOfLikes”))+Integer.parseInt((String)h2.get(“noOfComments”);
h2.认沽权(“总和”,sum2);
if(sum1==sum2)
return((Object)h1.get(“noOfLikes”)).compareTo((Object)h2.get(“noOfLikes”));
返回((对象)h1.get(“sum”)。比较((对象)h2.get(“sum”));
}
});
}
使用自定义实现,并将逻辑放入compareTo()
中,对哈希映射进行排序
至于您的第二部分,字符串有一个compareTo()
,可以让您将一个字符串与另一个字符串进行比较。按如下方式编辑代码解决了我的问题:
Collections.sort(mediaStatsDetailsArrayList, new Comparator <HashMap<String, String>>() {
@Override
public int compare(HashMap h1, HashMap h2) {
int likes1 = Integer.parseInt((String) h1.get("noOfLikes"));
int sum1 = (Integer.parseInt((String) h1.get("noOfLikes")) + Integer.parseInt((String) h1.get("noOfComments")));
h1.put("likes", likes1);
h1.put("sum", sum1);
int likes2 = Integer.parseInt((String) h2.get("noOfLikes"));
int sum2 = (Integer.parseInt((String) h2.get("noOfLikes")) + Integer.parseInt((String) h2.get("noOfComments")));
h2.put("likes", likes2);
h2.put("sum", sum2);
if (sum1 == sum2)
return ((Integer) h1.get("likes")).compareTo((Integer) h2.get("likes"));
return ((Integer) h1.get("sum")).compareTo((Integer) h2.get("sum"));
}
});
Collections.sort(mediaStatsDetailsArrayList,新的比较器(){
@凌驾
公共int比较(HashMap h1、HashMap h2){
int likes1=Integer.parseInt((字符串)h1.get(“noOfLikes”);
intsum1=(Integer.parseInt((String)h1.get(“noOfLikes”)+Integer.parseInt((String)h1.get(“noOfComments”);
h1.投入(“喜欢”,喜欢1);
h1.投入(“总和”,sum1);
int likes2=Integer.parseInt((字符串)h2.get(“noOfLikes”);
intsum2=(Integer.parseInt((String)h2.get(“noOfLikes”))+Integer.parseInt((String)h2.get(“noOfComments”);
h2.投入(“喜欢”,喜欢2);
h2.认沽权(“总和”,sum2);
if(sum1==sum2)
返回((整数)h1.get(“likes”).compareTo((整数)h2.get(“likes”);
返回((整数)h1.get(“sum”)。比较((整数)h2.get(“sum”));
}
});
HashMap hmap=newhashmap();
hmap.put(“num1”,“20”);
hmap.put(“num2”、“17”);
hmap.put(“name1”,“x\”);
hmap.put(“名称2”、“y”);
System.out.println(“排序前:”);
Set=hmap.entrySet();
迭代器迭代器=set.Iterator();
while(iterator.hasNext()){
Map.Entry me=(Map.Entry)迭代器.next();
System.out.print(me.getKey()+“:”);
System.out.println(me.getValue());
}
地图地图=新的树地图(hmap);
System.out.println(“排序后:”);
Set set2=map.entrySet();
迭代器迭代器2=set2.Iterator();
while(iterator2.hasNext()){
Map.Entry me2=(Map.Entry)迭代器2.next();
System.out.print(me2.getKey()+“:”);
System.out.println(me2.getValue());
}
return用于compare()。在评估compare
时修改参数不是一个好主意。如果您需要计算sum
属性并将其存储在映射中,请在排序之前通过迭代列表来完成。当我删除generics@Daniel Nugent时,将自动转换为文件
HashMap<Integer, String> hmap = new HashMap<Integer, String>();
hmap.put("num1", "\"20\"");
hmap.put("num2", "17");
hmap.put("name1", "\"x\"");
hmap.put("name2", "y");
System.out.println("Before Sorting:");
Set set = hmap.entrySet();
Iterator iterator = set.iterator();
while(iterator.hasNext()) {
Map.Entry me = (Map.Entry)iterator.next();
System.out.print(me.getKey() + ": ");
System.out.println(me.getValue());
}
Map<Integer, String> map = new TreeMap<Integer, String>(hmap);
System.out.println("After Sorting:");
Set set2 = map.entrySet();
Iterator iterator2 = set2.iterator();
while(iterator2.hasNext()) {
Map.Entry me2 = (Map.Entry)iterator2.next();
System.out.print(me2.getKey() + ": ");
System.out.println(me2.getValue());
}