Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- list.sort(Comparator.comparing(report -> report.name))
- list.sort(Comparator.comparing(report -> report.anyField))
- String sortBy = "name";
- list.sort(Comparator.comparing(report -> {
- try {
- return (Comparable) report.getClass().getDeclaredField(sortBy).get(report);
- } catch (Exception e) {
- throw new RuntimeException("Ooops", e);
- }
- }));
- String sortBy = "score";
- list.sort(Comparator.comparing(report -> Reflect.on(report).field(sortBy).get()));
- static Map<String,Comparator<Report>> ORDER;
- static {
- HashMap<String,Comparator<Report>> m=new HashMap<>();
- m.put("name", Comparator.comparing(r -> r.name));
- m.put("date", Comparator.comparing(r -> r.date));
- m.put("score", Comparator.comparingInt(r -> r.score));
- ORDER=Collections.unmodifiableMap(m);
- }
- public static void sort(List<Report> list, String order) {
- Comparator<Report> c=ORDER.get(order);
- if(c==null) throw new IllegalArgumentException(order);
- list.sort(c);
- }
- enum ReportOrder {
- NAME(Comparator.comparing(r -> r.name)),
- DATE(Comparator.comparing(r -> r.date)),
- SCORE(Comparator.comparingInt(r -> r.score));
- private Comparator<Report> cmp;
- private ReportOrder(Comparator<Report> c) { cmp=c; }
- public void sort(List<Report> list) {
- list.sort(cmp);
- }
- }
- public static void sort(List<Report> list, ReportOrder o) {
- list.sort(o.cmp);
- }
- sort(list, ReportOrder.DATE);
- list.sort(Comparator.comparing(Report::getFieldName));
- list.sort((ob1, ob2) -> ob1.getFieldName().compareTo(ob2.getFieldName()));
- public static class MyBean {
- private String name;
- private Date birthday;
- private Integer score;
- ...
- ... (constructor, getters, setters - the usual bean stuff)
- }
- PropertyDescriptor[] pdesc = Introspector.getBeanInfo(MyBean.class).getPropertyDescriptors();
- for(PropertyDescriptor pd : pdesc) {
- if(Comparable.class.isAssignableFrom(pd.getPropertyType())) {
- System.out.println("Property " + pd.getName() + " could be used for comparison");
- Function<MyBean, Comparable> extractor = b -> {
- try {
- return (Comparable) pd.getReadMethod().invoke(b);
- }
- catch(Exception e) {
- throw new RuntimeException(e);
- }
- };
- Comparator<MyBean> comp = Comparator.comparing(extractor);
- // do something useful with the comparator :-)
- }
- }
- private void someMethod(Comparator<Report> comparator){
- ...
- list.sort(comparator);
- ...
- }
- ...
- someMethod(Comparator.comparing(report::getName));
- someMethod(Comparator.comparing(report::getDate));
- someMethod(Comparator.comparingInt(report::getScore));
- someMethod(Comparator.comparing(report::getName).thenComparingInt(report::getScore));
- public class Report {
- //properties and getters
- public static void sort(List<Report> list, Function<Report, Comparable> sortKey) {
- list.sort(Comparator.comparing(sortKey));
- }
- }
- Report.sort(reports, Report::getName);
- Report.sort(reports, Report::getDate);
- Report.sort(reports, Report::getScore);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement