Java-排序-变量比较器

时间:2018-12-10 17:43:06

标签: java amazon-s3 comparison

我正在尝试根据用户输入对对象列表进行排序。我该如何使sort方法实现变体比较器?

示例:

List<S3ObjectSummary> objectSummaryList = getObjectSummaries();
objectSummaryList.sort(Comparator.comparing(S3ObjectSummary::getKey);

如何根据需要根据getKey / getModified /其他任意属性进行上述排序?

2 个答案:

答案 0 :(得分:3)

如果所有“键”都将链接到getter方法,则可以在函数中使用键/ getter的静态映射:

注意:我们将不得不使用原始类型time value ---- ---- 2018-12-10T17:00:00Z 7 2018-12-10T18:00:00Z 9 2018-12-10T19:00:00Z 10 2018-12-10T20:00:00Z 11 2018-12-10T21:00:00Z 13 2018-12-10T22:00:00Z 14 2018-12-10T23:00:00Z 15 2018-12-11T00:00:00Z 16 2018-12-11T01:00:00Z 17 2018-12-11T02:00:00Z 20 2018-12-11T03:00:00Z 24 2018-12-11T04:00:00Z 25 2018-12-11T05:00:00Z 26 2018-12-11T06:00:00Z 27 2018-12-11T07:00:00Z 28 2018-12-11T08:00:00Z 29 2018-12-11T09:00:00Z 31 2018-12-11T10:00:00Z 32 2018-12-11T11:00:00Z 33 2018-12-11T12:00:00Z 34 2018-12-11T13:00:00Z 35 2018-12-11T14:00:00Z 36 2018-12-11T15:00:00Z 37 2018-12-11T16:00:00Z 38 2018-12-11T17:00:00Z 39 ,因为我们不能使用不同的Comparable(即使所有吸气剂都将返回Functions<S3ObjectSummary, Comparable<T>>对象,{{1 }}会有所不同)

Comparable<X>

然后使用:

X

答案 1 :(得分:2)

这将帮助您:

String sortBy = "key";
list.sort(Comparator.comparing(report -> {
    try {
        return (Comparable) report.getClass().getDeclaredField(sortBy).get(report);
    } catch (Exception e) {
        e.printStackTrace();
        throw new RuntimeException("exception", e);
    }
}));