有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

包含数字和字母的java排序数组列表

这是我当前的arraylist:

ArrayList<String> myArrayList = new ArrayList<String>();    

[102423;asd.com, 49952;qwe.com, 76933;rty.com, 199526;fgh.com, 139388;jkl, 25114;qaz, 155766;ghj.com, 321339;vbn.com, 210513;kol.com]

我想按数字对它们进行排序。我尝试了以下几点:

Collections.sort(myArrayList)
for(String counter : myArrayList){
   System.out.println(counter);
  }

但它不起作用。我想先拆分,然后再收集。排序,但我不知道如何将他们再次配对


共 (3) 个答案

  1. # 1 楼答案

    使用^{}静态方法并提供一个自定义Comparator,其^{}方法从两个元素中提取数字前缀,并仅比较这些前缀

    例如,您可以使用^{}来获取数字前缀

  2. # 2 楼答案

    它不起作用的原因是您已声明了ArrayListof Strings。因此,Collections.sort(YourArrayList)将按字典顺序对其进行排序。因此,您必须编写自己的Comparator来读取字符串并对其进行解释和比较

    所以,试试这个

        List<String> list = Arrays.asList(
            "102423;asd.com", "49952;qwe.com", "76933;rty.com",
            "199526;fgh.com", "139388;jkl", "25114;qaz",
            "155766;ghj.com", "321339;vbn.com", "210513;kol.com");
        List<String> sorted = list.stream()
            .sorted(Comparator.comparing(s -> String.format("%0" + (20 - s.indexOf(';')) + "d%s", 0, s)))
            .collect(Collectors.toList());
        for (String s : sorted)
            System.out.println(s);
    

    结果是

    25114;qaz
    49952;qwe.com
    76933;rty.com
    102423;asd.com
    139388;jkl
    155766;ghj.com
    199526;fgh.com
    210513;kol.com
    321339;vbn.com
    

    此代码在内部排序列表

    00000000000000102423;asd.com
    00000000000000049952;qwe.com
    00000000000000076933;rty.com
    00000000000000199526;fgh.com
    00000000000000139388;jkl
    00000000000000025114;qaz
    00000000000000155766;ghj.com
    00000000000000321339;vbn.com
    00000000000000210513;kol.com
    
  3. # 3 楼答案

    使用比较器,如下所示:

    public class CustomComparator implements Comparator<String> {
        @Override
        public int compare(String o1, String o2) {
            return o1.split(";")[0].compareTo(o2.split(";")[0]);
        }
    }
    

    您的排序代码将与您所写的大致相同:

    Collections.sort(arrayList, new CustomComparator());