【问题标题】:how to sort numerical arraylist in ascending order如何按升序对数值数组列表进行排序
【发布时间】:2017-03-31 02:05:07
【问题描述】:

我有一个ArrayList,我使用Collections.sort 对其进行了排序。 但结果如下所示。如何让它升序排列?

[0, 1, 11, 12, 12, 13, 13, 14, 14, 16, 16, 16, 17, 17, 17, 18, 18, 19, 2, 2, 20, 20, 20, 21, 21, 22, 4, 7, 7, 7, 8, 9, 9, 9, 9, 9]

【问题讨论】:

  • 添加Python、Ruby、Perl等语言标签会让你得到更好的答案。
  • 输出表明您正在排序字符数据,而不是数字数据。它们的字符顺序正确。如果要将它们作为数字排序,请将它们转换为整数或添加前导(或尾随)零以使它们全部为两位数。
  • @Ken White 只是为了理解,你怎么说输出是按字符排序的,它们是按顺序排列的
  • 我不懂Java,但我想应该是这样的testList.sort((a, b) -> Double.compare(b, a))
  • 按字符排序时,它们的顺序正确,正如我所说的那样。复制这些值,将它们粘贴到 Excel 中格式化为文本的列中,然后让 Excel 对它们进行排序,您将获得与显示的完全相同的顺序。将它们格式化为数字,你会得到不同的排序。数字不需要或没有(或允许)前导零。

标签: java sorting arraylist


【解决方案1】:

Java 8:

List<String> numbers = new ArrayList<>();
    // add numbers...
    Collections.sort(numbers, Comparator.comparing(Integer::valueOf));

【讨论】:

    【解决方案2】:

    Collections.sort 方法在您不混合数字和字符串类型时可以正常工作;
    下面是一个示例:

           import java.util.*;
           public class ArrayListOfIntegers  {
    
            public static void main(String args[]){
            ArrayList<Integer> arraylist = new ArrayList<>();
            arraylist.add(12);
            arraylist.add(0);
            arraylist.add(12);
            arraylist.add(1);
            arraylist.add(12);
            arraylist.add(11);
           /* ArrayList before the sorting*/
            System.out.println("Before Sorting:");
            for(int counter: arraylist){
                 System.out.println(counter);
             }
    
            /* Sorting of arraylist using Collections.sort*/
               Collections.sort(arraylist);
    
            /* ArrayList after sorting*/
             System.out.println("After Sorting:");
             for(int counter: arraylist){
                 System.out.println(counter);
             }
          }
       }
    

    输出:

    祝你好运;

    【讨论】:

      【解决方案3】:

      看起来您的 ArrayList 包含字符串而不是数字。您可以通过将自定义 Comparator 传递给 sort() 方法来按数字顺序对其进行排序。

      在java 8中,可以使用Comparator.comparingInt()进行实际比较,结合Integer.parseInt()方法进行字符串到int的转换:

      ArrayList<String> list = new ArrayList<>();
      // ... add values    
      
      list.sort(Comparator.comparingInt(Integer::parseInt));
      

      【讨论】:

        【解决方案4】:

        Java7: Collections.sort() 方法对 String 和 Integer 数据类型的工作方式不同。
        我假设你有ArrayList&lt;String&gt;。一种解决方案是将其转换为ArrayList&lt;Integer&gt;,然后通过Collections.sort()

            ArrayList<String> strList = new ArrayList<String>();
            strList.add("0");
            strList.add("1");
            strList.add("11");
            strList.add("12");
            strList.add("2");
            strList.add("02");
            strList.add("004");
            strList.add("9");
            strList.add("20");
        
            System.out.println("strList Unsorted :" + strList);
            Collections.sort(strList);
            System.out.println("strList Sorted :" + strList);
        
            //Convert ArrayList<String> to ArrayList<Integer>
            List<Integer> intList = new ArrayList<Integer>(strList.size());
            for (String strValue : strList) {
                intList.add(Integer.parseInt(strValue));
            }
        
            System.out.println("intList Unsorted :" + intList);
            Collections.sort(intList);
            System.out.println("intList Sorted :" + intList);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-10
          • 2016-03-08
          • 2018-06-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多