Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 包含字符串哈希映射的排序arraylist?_Java_Android - Fatal编程技术网

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());
}