我已经用Java创建了一个名为Music的项目,并且在NetbeansProjects中有一个名为music.txt的文件,我想对所有数据进行排序,例如歌手,歌曲名称,年份,持续时间(以分钟为单位)和流派到音乐项目中。
我使用了collections.sort,但是为此我复制并粘贴了所有数据并写道:
list.add(new Music("Justin Timberlake", "Cry me a river", 2003, 4, "Pop")
list.add(new Music("Mariah Carey", "One sweet day", 1996, 2, "R&B")
collections.sort(list);
然后使用for循环,因为列表小于i,所以每次都会增加i。
但是有大约600行音乐,是否有更快的方法来按字母顺序对音乐进行排序,以及从最早到最新的年份?我是Java的初学者,因此有点困惑。
答案 0 :(得分:0)
Java提供了Collection.sort(...)方法,因为它很有效!如果要选择排序标准,则必须实现比较器或比较标准。 您可以通过两种方式执行此操作:
第一个方法是在Music类中添加一个方法“ compareTo”。
public int compareTo(Contact other) {
return name.compareTo(other.name); //for example...
}
,因此致电Collections.sort(list)
。
现在第二个:您可以定义一个外部可控制的顺序:
// Now sort by year instead of name (default).
Collections.sort(list, new Comparator<Music>() {
public int compare(Music one, Music two) {
return one.getYear().compareTo(two.getYear());
}
});
之后,您的列表将按名称或年份进行排序,您可以按顺序获取所有Music对象。
例如:
list.add(new Music("Justin Timberlake", "Cry me a river", 2003, 4, "Pop")
list.add(new Music("Mariah Carey", "One sweet day", 1996, 2, "R&B")
//sorting list
Collections.sort(list, new Comparator<Music>() {
public int compare(Music one, Music two) {
return one.getYear().compareTo(two.getYear()); //by year
}
});
//now see the result
for(Music m: list)
System.out.println(m.toString());
您的输出将是
[“ Mariah Carey”,“一个甜蜜的日子”,1996,2,“ R&B”]
[“ Justin Timberlake”,“ Cry me a river”,2003,4,“ Pop”]
答案 1 :(得分:0)
您可以简单地使用Java标准类库进行排序。这些方法非常有效,并且不算600种。所以尝试这样的事情:
List<Music> list = ...;
list.sort(comparing(Music::getName);
这按名称排序。
或者用拳头按名称排序,然后按年份排序(如果名称相同):
list.sort(comparing(Music::getName).thenComparing(Music::getYear));
方法comparing
是类java.util.Comparator
的静态导入。