基于Java中的多个参数降序排序

时间:2014-12-06 23:15:28

标签: java sorting date-sorting

我输入了多个字符串,我解析每个字符串以获取某些数据,然后相应地显示它们。关键是我需要在显示它们之前对它们进行排序。 澄清:

String s1 = "a1 5 2014-12-05";
String s2 = "a2 10 2014-12-06";
String s3 = "a3 5 2014-12-04":

在对每个字符串进行操作后,我需要先根据第二个参数对它们进行降序排序,然后根据日期达到平局时的日期排序。

输出应为:

a2, a1, a3

知道如何实现这一目标,或者我是否可以改变更有效的方式?!

1 个答案:

答案 0 :(得分:2)

您可以解析数据并使用Collections#sort。您的班级可以使用Comparable定义一些自然排序,如果您想要降序排序,那么只需将Comparator.reverseOrder()作为第二个arg传递给Collections#sort,就像这样

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;

public class DateSorter {

    static class Entry implements Comparable<Entry> {
        String id;
        int num;
        Date date;
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        public Entry(String id, int num, String date) throws ParseException {
            this.id = id;
            this.num = num;
            this.date = sdf.parse(date);
        }

        @Override
        public int compareTo(Entry o) {
            return date.compareTo(o.date);
        }

        @Override
        public String toString() {
            return id + '\'';
        }
    }

    public static void main(String[] args) throws ParseException {
        String s1 = "a1 5 2014-12-05";
        String s2 = "a2 10 2014-12-06";
        String s3 = "a3 5 2014-12-04";

        String[] split = s1.split(" ");

        List<Entry> entries = new ArrayList<>();
        entries.add(new Entry(split[0], Integer.parseInt(split[1]), split[2]));
        split = s2.split(" ");
        entries.add(new Entry(split[0], Integer.parseInt(split[1]), split[2]));
        split = s3.split(" ");
        entries.add(new Entry(split[0], Integer.parseInt(split[1]), split[2]));

    Collections.sort(entries, new Comparator<Entry>() {
        @Override
        public int compare(Entry o1, Entry o2) {
            return o2.compareTo(o1);
        }
    });

        System.out.println(entries);
    }
}

输出

[a2', a1', a3']