java - 根据比较器使用字符串日期排序?

标签 java date comparator

我有以下类(class):

public class Book implements Cloneable {
    private int ISBN;
    private String title;
    private String publishDate;
    private int pageCount;
}

我可以使用以下代码根据 Comparator 进行排序:

Comparator<Book> titleComparator = new Comparator<Book>() {
    @Override
    public int compare(Book o1, Book o2) {
        return o1.title.compareTo(o2.title);
    }
};

Comparator<Book> ISBNComparator = new Comparator<Book>() {
    @Override
    public int compare(Book o1, Book o2) {
        return Integer.valueOf(o1.ISBN).compareTo(o2.ISBN);
    }
};

public void sort(final String field, ArrayList<Book> BookList) {
    final Comparator<Book> comparator;

    if (field.equals("title")) {
        comparator = titleComparator;
    } else if (field.equals("ISBN")) {
        comparator = ISBNComparator;
    } else {
        throw new IllegalArgumentException("Comparator not found for " + field);
    }

    Collections.sort(BookList, comparator);
}

但是当发布日期格式为“25/12/2015”时,如何根据字符串 publishDate 进行排序?

最佳答案

如果您确定不能选择使用 Date 而不是 String,请使用此比较器(您可以添加一些缓存以避免每次都解析字符串):

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Comparator;

/**
 *
 * @author EBudaqov
 */
public class StringDateComparator implements Comparator<String>{

    private SimpleDateFormat formatter;

    public StringDateComparator(String dateFormat) {
        formatter = new SimpleDateFormat(dateFormat);
    }

    @Override
    public int compare(String s1, String s2) {
        try {
            return formatter.parse(s1).compareTo(formatter.parse(s2));
        } catch(ParseException exception) {
            throw new RuntimeException(exception);
        }
    }

    public static void main(String[] args) {
        String s1 = "01/01/2015";
        String s2 = "02/01/2015";

        System.out.println(new StringDateComparator("dd/MM/yyyy").compare(s1, s2));
    }

}

关于java - 根据比较器使用字符串日期排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34199929/

相关文章:

java - 为什么排序采用对象数组?

java - JRE 检测到 fatal error

java - 如何找到短语的第n个字母,并保留所有的起始字母?

java - 在后台杀死 Derby DB 网络服务器

python - 如何在 python 中为 DateTime 模块将时区设置为东部?

java - 使用 lambda 表达式 java 从比较器返回值

java - 尝试在java中四舍五入到小数点后两位

java - 如何使用 hibernate-ogm 和 Mongodb 上传文件?

mysql - 在mysql查询结果中添加过去一年的所有月份,即使没有行

compare - 在 Java 1.5 和 Java 1.7 中重写 'compare()' 时不返回 0 的缺点