Как отсортировать ArrayList <HashMap <String, String >>, которые содержат число и строку

Привет, я получаю ответ json в следующем формате

android,sorting,arraylist,hashmap,

0

Ответов: 2


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

Болеем !!!


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);
            }
        }
    });
}
андроид, сортировка, ArrayList, HashMap,
Похожие вопросы