Java 按每个字符串中逗号后的值按字母顺序对ArrayList排序

Java 按每个字符串中逗号后的值按字母顺序对ArrayList排序,java,arrays,string,arraylist,Java,Arrays,String,Arraylist,我有一个包含如下字符串的ArrayList: 第一条:一些文字,安娜贝利 第二项:一些文字,詹姆斯 第三项:一些文字,康纳 我想按每个字符串中逗号后的值按字母顺序对ArrayList排序 我怎样才能做到这一点 ArrayList<String> lineList = new ArrayList<>(); // New BufferedReader. BufferedReader reader = new BufferedReader(new

我有一个包含如下字符串的ArrayList:

  • 第一条:一些文字,安娜贝利
  • 第二项:一些文字,詹姆斯
  • 第三项:一些文字,康纳
我想按每个字符串中逗号后的值按字母顺序对ArrayList排序

我怎样才能做到这一点

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

    // New BufferedReader.
    BufferedReader reader = new BufferedReader(new FileReader(
            file));

    // Add all lines from file to ArrayList.
    while (true) {
        String line = reader.readLine();
        if (line == null) {
            break;
        }
        lineList.add(line);
    }

    // Close it.
    reader.close();

    // Print each line.
    for (String line : lineList) {
        System.out.println(line);
    }
ArrayList lineList=new ArrayList();
//新的BufferedReader。
BufferedReader reader=新BufferedReader(新文件读取器(
档案);;
//将文件中的所有行添加到ArrayList。
while(true){
字符串行=reader.readLine();
如果(行==null){
打破
}
lineList.add(行);
}
//关上它。
reader.close();
//打印每一行。
用于(字符串行:行列表){
系统输出打印项次(行);
}
将a与方法一起使用

例如:

Collections.sort(lineList, new Comparator<String>{
    public int compare(String str1, String str2) {
        String actual1 = str1.split(",")[1];
        String actual2 = str2.split(",")[1];

        return actual1.compare(actual2);
    }
});
Collections.sort(行列表,新比较器{
公共整数比较(字符串str1、字符串str2){
字符串actual1=str1.split(“,”[1];
字符串actual2=str2.split(“,”[1];
返回实际值1。比较(实际值2);
}
});

如果有零个或多个逗号,您可能需要某种方法来确保实际提取字符串的正确部分。例如,如IQV所述,您可以将
substring()
lastIndexOf()
结合使用。

如jesper所述,您需要一个比较器。在此比较器中,使用方法
lastIndexOf(',')

识别forname,这是一个使用Java 8的单行程序:

lineList.sort((String s1, String s2) -> s1.split(",")[1].compareTo(s2.split(",")[1]));
Collections.sort(list, Comparator.comparing(s -> s.substring(s.lastIndexOf(","), s.length())));

填充后不要对列表进行排序,动态排序:

public static void main(String[] args) throws IOException {
        Set<String> lines = new TreeSet<>(Comparator.comparing(o -> o.substring(o.indexOf(','))));

        // New BufferedReader.
        BufferedReader reader = new BufferedReader(new FileReader("sample.txt"));

        // Add all lines from file to ArrayList.
        while (true) {
            String line = reader.readLine();
            if (line == null) {
                break;
            }
            lines.add(line);
        }

        // Close it.
        reader.close();

        // Print each line.
        for (String line : lines) {
            System.out.println(line);
        }
    }
publicstaticvoidmain(字符串[]args)引发IOException{
设置行=新树集(Comparator.comparing(o->o.substring(o.indexOf(','))));
//新的BufferedReader。
BufferedReader=newBufferedReader(newFileReader(“sample.txt”);
//将文件中的所有行添加到ArrayList。
while(true){
字符串行=reader.readLine();
如果(行==null){
打破
}
行。添加(行);
}
//关上它。
reader.close();
//打印每一行。
用于(字符串行:行){
系统输出打印项次(行);
}
}

一个使用Java 8的线性变量:

lineList.sort((String s1, String s2) -> s1.split(",")[1].compareTo(s2.split(",")[1]));
Collections.sort(list, Comparator.comparing(s -> s.substring(s.lastIndexOf(","), s.length())));
或更短

list.sort(Comparator.comparing(s -> s.substring(s.lastIndexOf(","), s.length())));

您的文件是“csv”吗?如果是,则需要小心,因为逗号可以作为值的一部分包含,如“'Some,text',Annabelle”。不,它是一个txt文件,但是的,我理解其中的问题。谢谢如果您有较大的文件大小,那么创建已经排序的列表,而不是在内存中对其进行排序,会很方便。看看我的答案。好的,我会抽出时间来测试一下。谢谢你的帮助!“您可能需要某种方法来确保……”或者如果只有逗号在末尾,例如
Foo,