gpt4 book ai didi

java - 排序 ArrayList

转载 作者:行者123 更新时间:2023-11-29 05:20:58 24 4
gpt4 key购买 nike

我在尝试对自定义对象的 ArrayList 进行排序时遇到问题。事实上,在排序之后,我的 ArrayList 中没有任何变化。我的方法有问题吗?

这是我的艺术家自定义对象属性:

public class Artist {

String mNickname;
String mName;
String mDescription;
String mScene;
String mDay;
String mTime;
String mImageURL;
Date mDate;

// getters and setters below like getDate() for mDate...

下面是用于排序的方法:

static public ArrayList<Artist> sortArrayByDate(ArrayList<Artist> list) {       

Collections.sort(list, new Comparator<Artist>() {
@Override
public int compare(Artist lhs, Artist rhs) {
if (lhs.getDate().getTime() < rhs.getDate().getTime())
return -1;
else if (lhs.getDate().getTime() == rhs.getDate().getTime())
return 0;
else
return 1;
}
});

return list;
}

我知道这个话题在 StackOverflow 上已经讨论了很多次,但我找不到为什么我不能让它正常工作。感谢您的理解

编辑:日期(java.util.date)是使用 SimpleDateFormatter 创建的

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.CANADA_FRENCH);

最佳答案

为什么不简单地使用 Date#compareTo()用于比较,因为 java.util.Date 实现了 Comparable 接口(interface)。

在排序后,该方法不必返回 List 的实例,因为底层 List 对象将通过调用排序进行修改。基本上,该方法是通过将引用值作为参数传递来调用的。因此,当进行修改时,更改会反射(reflect)在引用值指向的基础对象上。使用这种方法,代码只需将 List 传递到方法中,然后继续在后续代码中使用相同的引用,该引用将指向已排序的基础 List .

要考虑的另一项是修改方法以接受 List 类型的参数,而不是 ArrayList,因为 List 是一个接口(interface),因此更抽象。这将允许代码切换传递给方法的 List 的实现。这很重要,因为 ArrayList 不保证列表中项目的顺序得到维护。为保证 List 中项目的顺序,使用 LinkedList 进行维护。

static public void sortArrayByDate(List<Artist> list) {       

Collections.sort(list, new Comparator<Artist>() {
@Override
public int compare(Artist lhs, Artist rhs) {
return lhs.getDate().compareTo(rhs.getDate());
}
});

}

这是一个GitHub Gist我创建了一个完整的工作示例,展示了此方法的实际应用。

关于java - 排序 ArrayList<CustomObject>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24769988/

24 4 0