多个不同对象,按某个字段排序
在项目中遇到三个不同的对象list集合,现按照时间顺序将其排序:
HashMap<String,Object> param = new HashMap<>(); //现有集合as、bs、cs:list集合对象 List<对象A> as ; as.stream().forEach(A-> { param.put(A.getId(),A); }); List<B> bs; bs.stream().forEach(B-> { param.put(B.getId(),B); }; List<C> cs; cs.stream().forEach(C-> { param.put(C.getId(),C); }); //因为三个字段中要比较的字段名一样,就不需要在上述流中统一将比较字段赋值给某一字段 //比较器 Comparator<Object> comparator = (o1,o2) -> { Date o1Time = getComparatorForObject(o1); Date o2Time = getComparatorForObject(o2); if (o1Time.compareTo(o2Time) != 0) { return o1Time.compareTo(o2Time); } return 0; }; //获取集合中values值 Collection<Object> values = param.values(); //传入比较器排序 List<Object> collect = values.stream().sorted(comparator.reversed()).collect(Collectors.toList()); public Date getComparatorForObject(Object o1) { Date o1Time = new Date(); if (o1 instanceof A) { o1Time = ((A) o1).getCreateTime(); }else if (o1 instanceof B) { o1Time = ((B) o1).getCreateTime(); }else if (o1 instanceof C) { o1Time = ((C) o1).getCreateTime(); } return o1Time; }
下一篇:
【Java笔试强训】day11编程题