[英]Sorting an ArrayList by the second word in a string
我目前有一个.txt文件,我需要根据内部内容读取和输出数据。 我目前已经打开了文件,并将文件中的每一行保存到ArrayList中。
.txt文件是这样设置的;
当前代码;
{
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.