java中list排序方式

//1 这种方式直接改变了原list数据        list.sort(Comparator.comparing(IdleTimePeriod::getStart).thenComparing(IdleTimePeriod::getEnd));
        //2 这种方式返回一个list的副本( 排序之后的)不改变原list
        //        Stream sorted = list.stream().sorted(
        //                Comparator.comparing(IdleTimePeriod::getStart).thenComparing(IdleTimePeriod::getEnd));

        //3 这种方式直接改变原list数据
        //        Collections.sort(list, (o1, o2) -> {
        //            if (o1.getStart().isEqual(o2.getStart())) {
        //                return o1.getEnd().isAfter(o2.getEnd()) ? 1 : o1.getEnd().isEqual(o2.getEnd()) ? 0 : -1;
        //            }
        //            return o1.getStart().isAfter(o2.getStart()) ? 1 : o1.getStart().isEqual(o2.getStart()) ? 0 : -1;
        //        });

第三种方法虽然比较笨重 但是可以做一些复杂的逻辑处理;在使用时候注意 需要满足比较约束 就是说当两个值相等时候f (x, y) = -f(y,x);通俗讲就是在比较的时候不能忽略两个数值相等的情况 不能简单写 x > y ? 1 : -1;这样 要x > y ? 1 : x ==y ? 0 : -1 将相等的情况也要考略
第一种和第二种方式简洁 可以满足绝大部分的排序 其中 Comparator.comparing(IdleTimePeriod::getStart).thenComparing(IdleTimePeriod::getEnd)); thenComparing当comparing比较返回0即相等时候 则执行该方法中的比较规则

你可能感兴趣的:(java中list排序方式)