如何按前缀整数值对 ArrayList<String> 进行排序[重复]

Posted

技术标签:

【中文标题】如何按前缀整数值对 ArrayList<String> 进行排序[重复]【英文标题】:How to sort ArrayList<String> by the prefixed Integer value [duplicate] 【发布时间】:2019-12-04 08:39:15 【问题描述】:

如何搜索前面有数字值的排序数组列表,计划是我想对数字最大到最小的列表视图进行排序

private void setupData()
    ArrayList<String> hasil = new ArrayList<>();
    Set<String> keySet = chains.keySet();
    for(String key : keySet)
        float ms = Float.parseFloat(chains.get(key).get(0));
        float ma = 0;
        for(String str : chains.get(key))
            if(str.contains(","))
                ma += Float.parseFloat(str.split(",")[1]);
        

        float pa = ma * 100;
        String namaGangguan = SQLiteHelper.getInstance(this).getGangguan(key).getNama();
        hasil.add((int)pa + " % " + namaGangguan); // this is i want sorting
    

    Collection.sort(hasil); //this is my code

    ArrayAdapter<String> diagnoseAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, hasil);
    listView.setAdapter(diagnoseAdapter);

如何搜索前面有数字值的排序数组列表,计划是我想对数字最大到最小的列表视图进行排序

【问题讨论】:

【参考方案1】:

由于您需要使用该字符串前面的数字对其进行排序,因此您需要提供自定义比较器Collections::sort:例如:

   Collections.sort(hasil, new Comparator<String>() 
        @Override
        public int compare(String o1, String o2) 
            // null check needed?
            int diff = getIntValue(o2) - getIntValue(o1);
            if (diff == 0) return o1.compareTo(o2);
            return diff;
        

        int getIntValue(String str) 
            if (str == null) return 0;
            int value = 0;
            int indx = 0;
            while (indx < str.length() && Character.isDigit(str.charAt(indx))) 
                value = value * 10 + (str.charAt(indx) - '0');
                indx++;
            
            return value;
        
    );



    System.out.println(hasil);

对于输入值:

List<String> list = new ArrayList<>();

    list.add("123 %kljadfd");
    list.add("1 %kljadfd");
    list.add("11123 %kljadfd");
    list.add("9 %kljadfd");

这将输出:

   [ 11123 %kljadfd,
     123 %kljadfd,
     9 %kljadfd,
     1 %kljadfd ]

【讨论】:

以上是关于如何按前缀整数值对 ArrayList<String> 进行排序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java按整数字段对对象数组进行排序,如果它们相同,则按另一个整数值排序

alpha 对具有相同整数值且应按升序排列的列表进行排序[重复]

按特定逻辑合并 ArrayList of Integers

Haskell - 按整数值对带有字符串的列表进行排序的函数

Numpy:如何按整数值缩放整数数组?

如何按整数值降序对该表进行排序?