在 Java 中根据多个参数降序排序



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

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

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

输出应为:

a2, a1, a3

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

您可以解析数据并使用 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']

相关内容

  • 没有找到相关文章