如何排序ArrayList <hashmap <string,string =“”>&gt;其中包含数字和字符串

时间:2016-10-15 10:13:34

标签: android sorting arraylist hashmap

您好我以下列格式获得了json响应

2 个答案:

答案 0 :(得分:0)

要解决此问题,您可以解析大小,然后对它们进行排序。

例如,

import java.util.*;

public class HelloWorld{

     public static void main(String []args){
        List<String> sizes = new ArrayList<>();
        sizes.add("10X12");
        sizes.add("4X6");
        sizes.add("3X2");
        sizes.add("5X12");
        sizes.add("8X12");

        Collections.sort(sizes, new Comparator<String>()
        {
            @Override
            public int compare(String o1, String o2)
            {
                int s1 = Integer.parseInt(o1.split("X")[0]);
                int s2 = Integer.parseInt(o2.split("X")[0]);
                return s1-s2;
            }
        });
        System.out.println(sizes);        
     }
}

啦啦队!!!

答案 1 :(得分:0)

对实际ArrayList<HashMap<String,String>>

进行排序

当然,这可能比首先解析整个事件以获取ArrayList,然后更容易和有效地排序,而不需要在每次比较中进行一些解析。

但你明确要求对ArrayList<HashMap<String,String>>进行排序,可能是出于好奇,或者因为它在你的情况下实际上更加实用,所以在这里你去:)

class Size
{
    int width;
    int height;
}

final Pattern pattern = Pattern.compile("(\\d+)X(\\d+)");
final String papersizeKey = "papersize";

Size readSize(String description)
{
    Matcher matcher = pattern.matcher(description);

    Size result = new Size();

    result.width = Integer.parseInt(matcher.group(1));
    result.height = Integer.parseInt(matcher.group(2));

    return result;
}

void sort(ArrayList<HashMap<String, String>> paperSizes)
{
    paperSizes.sort(new Comparator<HashMap<String, String>>()
    {
        public int compare(HashMap<String, String> lhs, HashMap<String, String> rhs)
        {
            Size lhsSize = readSize(lhs.get(papersizeKey));
            Size rhsSize = readSize(rhs.get(papersizeKey));

            int result = Integer.compare(lhsSize.width,  rhsSize.width);

            if (result != 0)
            {
                return result;
            }
            else
            {
                return Integer.compare(lhsSize.height,  rhsSize.height);
            }
        }
    });
}