【发布时间】:2018-06-30 05:15:15
【问题描述】:
我还有一个 ArrayList 项。我有从媒体派生的类。给定下面的代码,我将如何按持续时间对数组列表进行排序?例如
Collections.sort(myMedia, ?);
这是课程
import java.util.Comparator;
public abstract class Media implements Comparable<Media>{
private int duration;
private String title;
private String imageFileName;
private static String imageFileDirectory = "src/resources/";
public Media(String name, int seconds) {
this.title = name;
this.duration = seconds;
this.imageFileName = "";
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getDuration() {
return duration;
}
public void setDuration(int d) {
this.duration = d;
}
public String getImageFileName() {
return imageFileName;
}
public void setImageFileName(String imageFileName) {
this.imageFileName = imageFileName;
}
public static String getImageFileDirectory() {
return imageFileDirectory;
}
public static void setImageFileDirectory(String imageFileDirectory) {
Media.imageFileDirectory = imageFileDirectory;
}
@Override
public String toString() {
return this.getTitle()
+ ", Duration: " + this.getDuration() + "s, " +
"Cost: " + costInPence() + "p";
}
public abstract int costInPence();
@Override
public int compareTo(Media o) {
return this.getTitle().compareTo(o.getTitle());
}
public static class DurationComparator implements Comparator<Media>{
public int compare(Media m1, Media m2) {
return m2.getDuration() - m1.getDuration();
}
}
public static class CostComparator implements Comparator<Media>{
public int compare(Media m1, Media m2) {
return m2.costInPence() - m1.costInPence();
}
}
}
【问题讨论】:
-
Collections.sort(myMedia, new DurationComparator()); -
优秀。它有效:)
-
你已经写了比较器!
-
如果你想按持续时间排序,你应该使用
DurationComparator。如果您想按 title 排序,则不需要指定任何比较器,因为您的Media对象将其定义为它们的 自然顺序(通过使用Comparable和 @ 987654328@).
标签: java