繁体   English   中英

按字符串中的第二个单词对ArrayList进行排序

[英]Sorting an ArrayList by the second word in a string

我目前有一个.txt文件,我需要根据内部内容读取和输出数据。 我目前已经打开了文件,并将文件中的每一行保存到ArrayList中。

.txt文件是这样设置的;

  • 2380213012999 1508434343432大卫死了
  • 4327482397488 7439857934858约翰·阿里恩
  • 3857948998099 2222783749887马丁杀死凯利
  • 3857948998099 2222783749887约翰杀死了大卫

当前代码;

 {
    try {
        File file = new File("input.txt");
        FileReader fileReader = new FileReader(file);
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        StringBuffer stringBuffer = new StringBuffer();
        String line;
        ArrayList<String> txtline = new ArrayList<String>();
        while ((line = bufferedReader.readLine()) != null) {
            txtline.add(line);
            System.out.println(txtline);
        }

        fileReader.close();
        System.out.println(stringBuffer.toString());
    } catch (IOException e) {
        e.printStackTrace();
    }
}

}

我只是想知道是否有一种方法可以按第二大数字对文本的每一行进行排序,我已经看过了,但似乎什么也找不到。 正确的方向或一些指导会令人惊讶,因为我目前很沮丧,因为我需要这样做才能继续前进。

将其放在while循环之后

java.util.Collections.sort(txtLine, new Comparator<String>() {
    public void compare(String lineA, String lineB) {
        String wordA2 = lineA.split(" ")[1];
        String wordB2 = lineB.split(" ")[1];
        return wordA2.compareTo(wordB2);
    }
});

可以更有效地完成,但是代码不会比这短得多(除非您使用lambda)。

java.util.Collections.sort(txtLine, (String lineA, String lineB) -> {
        String wordA2 = lineA.split(" ")[1];
        String wordB2 = lineB.split(" ")[1];
        return wordA2.compareTo(wordB2);
});

您可以通过创建列表流,将Comparator对象传递给sorted方法来定义排序键 ,然后将其收集到ArrayList来完成手头的任务。

数字比较:

txtline = txtline.stream()
                 .sorted(Comparator.comparingLong((String e) -> Long.parseLong(e.split(" ")[1])))                             
                 .collect(Collectors.toCollection(ArrayList::new));

按字符串比较:

txtline = txtline.stream()
                 .sorted(Comparator.comparing((String e) -> e.split(" ")[1]))
                 .collect(Collectors.toCollection(ArrayList::new));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM