gpt4 book ai didi

java - 对字符串 ArrayList 进行排序时出现问题

转载 作者:行者123 更新时间:2023-12-02 00:04:36 26 4
gpt4 key购买 nike

Possible Duplicate:
sort array list of special strings, by date

我有一个从文件中读取的字符串数组列表,每个字符串的第一部分是一个日期,例如:12/01/2012。当我使用 Collections.sort(); 时它在一年内从最旧到最新对它进行排序,但是当它到达 01/01/2013 时,它会将其与最旧的一起放在列表的顶部。我怎样才能让它使用年份作为排序的一部分?我尝试使用日期,但效果相同。每个字符串都有很多我想保留在其中的信息,只需按开头对其进行排序即可。我认为没有必要发布代码,因为它正在工作,而我遇到的问题只是排序。我在这里搜索了一段时间并尝试了几种不同的排序选项但无济于事。所以我一定很困惑或者忘记了什么。如果有人有任何想法如何对开头带有日期的字符串进行排序,请帮忙!谢谢!

示例字符串:“12/01/2012 34023843 商品编号”

最佳答案

您需要一个自定义比较器。按自然顺序比较字符串(即使用 String 实现 Comparable<String> 的事实)将给出您看到的结果,因为 0低于 1 ,所以这是预期的。

这里是一个示例类,它可以执行您想要的操作,但请注意,它假设所有日期的格式都正确(如果日期不正确,parse()DateFormat 方法会抛出未经检查的 IllegalArgumentException ):

public final class MyComparator
implements Comparator<String>
{
// Date parsing
// Note: SimpleDateFormat is not thread-safe, if possible use Joda Time instead
private static final DateFormat fmt = new SimpleDateFormat("dd/MM/YYYY");

private static final Comparator<String> INSTANCE = new MyComparator();

private MyComparator()
{
}

public static Comparator<String> getInstance()
{
return INSTANCE;
}

@Override
public int compare(String o1, String o2)
{
// Grab dates
String s1 = o1.subString(0, 10);
Date d1 = fmt.parse(s1);
String s2 = o2.subString(0, 10);
Date d2 = fmt.parse(s2);

// Date implements Comparable<Date>, so we can use that...
int ret = d1.compareTo(d2);

// If dates are equal, compare the rest of the strings instead.
return ret != 0 ? ret : o1.subString(10).compareTo(o2.subString(10));
}
}

然后您可以使用 Collections.sort(theArray, MyComparator.getInstance());

关于java - 对字符串 ArrayList 进行排序时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14115222/

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