努力了不一定会成功,但是不努力就一定不会成功!!!
If you try hard, you may not succeed, but if you don't work hard, you will not succeed!!!
1、问题1:
问题:这篇博文问题:https://blog.csdn.net/weixin_41453111/article/details/104942362
Comparator.comparing报错:non-static method cannot be referenced from a static context
解决方法:不要连续调用.reversed()方法:
可以利用apache比较器工具包的reversedComparator方法;或者拆分成两个语句。
①ComparatorUtils.reversedComparator(Comparator.comparing(CategoryVo::getSortOrder));
②Comparator<CategoryVo> comparator = Comparator.comparing(CategoryVo::getSortOrder);
.sorted(comparator.reversed());
2、问题2:
依赖泛型属性比较。
public class User<T> {
private String name;
private Integer age;
private T obj;
}
Comparator<User> comparing = Comparator.comparing(User::getObj);
依赖obj参数排序,此时会报错。
解决办法:泛型参数T需要限定实现了Comparable<>接口。
public class User<T extends Comparable<T>> {
private String name;
private Integer age;
private T obj;
}
这样就解决了。
本质原因分析:
Comparator.comparing源码:
public static <T, U extends Comparable<? super U>> Comparator<T> comparing(
Function<? super T, ? extends U> keyExtractor)
{
Objects.requireNonNull(keyExtractor);
return (Comparator<T> & Serializable)
(c1, c2) -> keyExtractor.apply(c1).compareTo(keyExtractor.apply(c2));
}
其中限定了U类型必须是继承Comparable<? super U>接口。