Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 包含数字和字母的排序Arraylist_Java_Sorting_Arraylist - Fatal编程技术网

Java 包含数字和字母的排序Arraylist

Java 包含数字和字母的排序Arraylist,java,sorting,arraylist,Java,Sorting,Arraylist,这是我当前的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] 但它不起作用。我想先拆分,然后再进行收集。排序,

这是我当前的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]
但它不起作用。我想先拆分,然后再进行收集。排序,但我不知道如何将它们再次配对

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

例如,您可以使用获取数字前缀。

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


例如,您可以使用获取数字前缀。

使用比较器,如下所示:

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

使用比较器,如下所示:

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

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

所以,试试这个

    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);
此代码在内部排序列表

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

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

所以,试试这个

    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);
此代码在内部排序列表

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

这是一个对象列表?发布列表声明我的列表是
ArrayList myArrayList=new ArrayList()你建议改为“列表”吗?“它不工作”不是问题的适当描述。不,没关系。。只需实现Comparator()来只比较数字部分接口,并将其作为Collections.sort()方法中的第二个参数传递(比较后不必将它们配对)这是一个对象列表?发布列表声明我的列表是
ArrayList myArrayList=new ArrayList();
您建议改为'list'吗“它不起作用”不是对问题的充分描述。不,没关系。只需实现Comparator()来只比较数字部分接口,并将其作为集合中的第二个参数传递。sort()方法(在比较后不必将它们配对)这将不起作用。你在考虑整条绳子。你需要先把弦分开,只考虑他们的第一个部分。我要上新课吗?这样不行。你在考虑整条绳子。你需要先把弦分开,只考虑他们的第一个部分。我要上一堂新课吗?