【发布时间】:2020-08-14 04:16:28
【问题描述】:
我要读取的文件如下所示:
1995 Pokemon Ikue Ôtani
1940 Tom and Jerry William Hanna
1995 Pokemon voice actor2
1940 Tom and Jerry voice actor3
2000 Cartoon voice actor
它有大约 20k 行。我已经可以读取文件并将数据存储在一个对象中。
in = new BufferedReader(new FileReader(cartoonsFile));
ArrayList<String> voiceActors = new ArrayList<>();
ArrayList<Cartoon> cartoons = new ArrayList<>();
//read each line
String line = in.readLine();
while (line != null) {
String[] columns = line.split("\\t");
String year = columns[0];
String cartoon = columns[1];
String voiceActor = columns[2];
//make new object and store data
Cartoon c = new Cartoon(Integer.parseInt(columns[0]),
columns[1], columns[2]));
cartoons.add(c); //add to the array list
对象
public class Cartoon {
private int year;
private String title;
private String voiceActor;
public Cartoon(int year, String title, String voiceActor) {
this.year = year;
this.title = title;
this.voiceActor = voiceActor;
}
};
我想在线程中读取文件并按年份排序。谁能提供有关如何一起实现多线程和归并排序的示例代码?
我想得到的输出
1940 Tom and Jerry William Hanna
voice actor2
voice actor3
voice actor4
voice actor5
1995 Pokemon Ikue Ôtani
voice actor2
A Cartoon voice actor1
voice actor2
voice actor3
2000 Cartoon voice actor
【问题讨论】:
-
您的问题缺少信息:您的代码看起来每部电影只有一个配音演员,但您想要的输出看起来好像可能有多个配音演员。我看不到你在哪里/如何解析它。输入格式没有完整描述,我也看不到关键类
CartoonYear(错误的类名,BTW)。 -
啊,好吧,在你最后一次编辑之后,我可以看到输入文件是如何组织的,以防每部电影有多个配音演员。我认为创建一个
Cartoon类会更好,它可以有多个配音演员,而不是许多多余的配音演员。 -
那我把 CartoonYear 改成 'Year' 类,它可以容纳多个卡通类,对吧?
-
我不是这个意思。我宁愿考虑一个
Cartoon课程,其中包含年份、标题和一个或一组演讲者。但是根据您自己的方法和@saka1029 的回答,您也可以使用Java 流和Collectors.groupingBy。但是你需要某种按年份+标题分组的帮助类(只有年份不是唯一的)。我可以发布一个简单的例子。 -
为什么? 20,000 个条目不是一个大文件,无论你怎么做,它都会在几纳秒内排序。不需要多线程。
标签: java multithreading data-structures filereader mergesort