gpt4 book ai didi

Java Comparator 使用 .reverseOrder() 但有一个内部类

转载 作者:IT老高 更新时间:2023-10-28 21:17:04 26 4
gpt4 key购买 nike

我正在创建一个简单的程序来了解 Java Comparator 类。我已经排序了 Arraylist按顺序排列,但现在我想按降序对列表进行排序,但在调用 .reverseOrder() 的位置时遇到问题方法,因为我使用了实现 Comparator<Song> 的内部类(song 是一个包含 getter 和 setter 方法的歌曲类)。

这是我的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类;

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 中的方法类,因为它不会编译?

最佳答案

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());

关于Java Comparator 使用 .reverseOrder() 但有一个内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5789503/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com