我正在创建一个简单的程序来了解Java Comparator类。我已经按顺序进行Arraylist了排序,但是现在我想按降序对列表进行排序,但是.reverseOrder()由于使用了实现的内部类Comparator<Song>(歌曲是容纳getter和setter方法的歌曲类),在调用该方法时遇到了问题。
Arraylist
.reverseOrder()
Comparator<Song>
这是我的SongSort课程,里面包含分类过程等。
SongSort
import java.util.*; import java.io.*; public class SongSort { ArrayList<Song> songList = new ArrayList<Song>(); public void main(String[] args) { new SongSort().go(); } class ArtistCompare implements Comparator<Song> { public int compare(Song one, Song two) { return one.getRating().compareTo(two.getRating()); } } public void go() { getSongs(); System.out.println(songList); //Collections.sort(songList); System.out.println(songList); ArtistCompare artistCompare = new ArtistCompare(); Collections.sort(songList, artistCompare); System.out.println(songList); } public void getSongs() { try{ File file = new File("SongListMore.txt"); BufferedReader reader = new BufferedReader(new FileReader(file)); String line = null; while((line = reader.readLine()) != null) { addSong(line); } } catch(Exception ex) { ex.printStackTrace(); } } public void addSong(String lineToParse) { String [] tokens = lineToParse.split("/"); Song nextSong = new Song(tokens[0], tokens[1], tokens[2], tokens[3]); songList.add(nextSong); } }
这是我的简单Song课程;
Song
public class Song //implements Comparable<Song> { private String title; private String artist; private String rating; private String bpm; public Song(String t, String a, String r, String b) { title = t; artist = a; rating = r; bpm = b; } public String getTitle() { return title; } public String getArtist() { return artist; } public String getRating() { return rating; } public String getBpm() { return bpm; } public String toString() { return ("Title : " + title + "," + " Artist : " + artist + " Rating : " + rating); } }
有人可以帮我弄清楚我将reverseOrder()在SongSort类中调用该方法的地方,因为它无法编译?
reverseOrder()
ArtistCompare artistCompare = new ArtistCompare(); Collections.sort(songList, Collections.reverseOrder(artistCompare));
编辑2015年7月
由于此答案仍然受到关注,因此这里进行了一个小更新:
使用Java SE 8,创建反向比较器变得更加容易:
Comparator<Song> songRatingComparator = Comparator.comparing(Song::getRating); Collections.sort(songList, songRatingComparator.reversed());
当然,您还可以使用Streams框架:
List<Song> sortedSongList = songList.stream() .sorted(Comparator.comparing(Song::getRating).reversed()) .collect(Collectors.toList());