我正在尝试根据用户输入对对象列表进行排序。我该如何使sort方法实现变体比较器?
示例:
List<S3ObjectSummary> objectSummaryList = getObjectSummaries();
objectSummaryList.sort(Comparator.comparing(S3ObjectSummary::getKey);
如何根据需要根据getKey / getModified /其他任意属性进行上述排序?
答案 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);
}
}));