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

#android #sorting #arraylist #hashmap

#Android #сортировка #arraylist #hashmap

Вопрос:

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

Ответ №1:

Чтобы решить эту проблему, вы можете проанализировать размер, а затем отсортировать их.

Например,

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

Приветствую!!!

Ответ №2:

Сортировка фактического 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 resu<
}

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 resu<
            }
            else
            {
                return Integer.compare(lhsSize.height,  rhsSize.height);
            }
        }
    });
}