Java排序变量比较器
我正在尝试根据用户输入对对象列表进行排序。如何让sort方法实现变量比较器 例如:Java排序变量比较器,java,amazon-s3,comparison,Java,Amazon S3,Comparison,我正在尝试根据用户输入对对象列表进行排序。如何让sort方法实现变量比较器 例如: List<S3ObjectSummary> objectSummaryList = getObjectSummaries(); objectSummaryList.sort(Comparator.comparing(S3ObjectSummary::getKey); List objectSummaryList=getObjectSummaries(); objectSummaryList.sort
List<S3ObjectSummary> objectSummaryList = getObjectSummaries();
objectSummaryList.sort(Comparator.comparing(S3ObjectSummary::getKey);
List objectSummaryList=getObjectSummaries();
objectSummaryList.sort(Comparator.comparing)(S3ObjectSummary::getKey);
如何根据需要基于getKey/getModified/其他任意属性进行上述排序?这将帮助您:
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);
}
}));
如果所有“键”都将链接到getter方法,则可以在函数中使用键/getter的静态映射:
注意:我们必须使用原始类型Comparable
,因为我们不能使用不同的函数
(即使所有getter将返回Comparable
对象,X
也会有所不同)
创建N个比较器,询问用户他想要使用哪一个,然后使用他选择的。dank,正是我想要的。
Map<String, Function<S3ObjectSummary, Comparable>> map = new HashMap<>();
map.put("key", s3 -> s3.getKey());
map.put("modified", s3 -> s3.getModified());
// other entries
objectSummaryList.sort(Comparator.comparing(map.get(compareByKey)));