请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

对于Comparator.comparing(。。。)不太理解

老师您好,不太理解下面这块的排序写法

https://img1.sycdn.imooc.com//szimg/5e84ad1f097aef5808960163.jpg

可以详细说说吗?

正在回答

插入代码

3回答

张小喜 2020-04-06 23:20:37

https://img1.sycdn.imooc.com//szimg/5e8b465f097786c513680286.jpg

咱们看看是如何从这种方式进行演化的啊。

这是你熟悉的方式,它的底层是调用list.sort方法的。可以看看源码:

https://img1.sycdn.imooc.com//szimg/5e8b46c50966f6f416040532.jpg

所以就能改写成上面这样list.sort()的方式。

我们再来看看Comparator的静态方法comparing是什么:

https://img1.sycdn.imooc.com//szimg/5e8b472309f4436f16540264.jpg

它其实就是使用lambda表达式定义了一个Comparator的函数式接口,并且提供了一个function的参数负责从c1和c2中获取相应的属性。

所以最后可以改写成这样:

https://img1.sycdn.imooc.com//szimg/5e8b47e7093112de11680110.jpg

就是告诉list,我想使用Sku对象的skuId属性进行排序。


其实这种声明式的编程方式将底层实现细节屏蔽了很多,比如说你使用SELECT * FROM USER的时候,根本不用关心它底层是如何对数据进行检索的。类似的Stream也是这样,我们直接调用它sort方法,给它一个需要排序的字段,它就帮我们排好序了。

2 回复 有任何疑惑可以回复我~
  • 提问者 乃好 #1
    哇谢谢老师,果然不懂的还是要先去看看源码
    回复 有任何疑惑可以回复我~ 2020-04-06 23:40:00
张小喜 2020-04-02 12:59:23

可以加我qq,咱们约个时间,给你说说这块

0 回复 有任何疑惑可以回复我~
张小喜 2020-04-02 12:34:18

你是指双冒号这种写法吗,可以看看后面补充的方法引用精讲那节。

0 回复 有任何疑惑可以回复我~
  • 提问者 乃好 #1
    老师您好,我是不太理解Comparator.comparing这样的排序,还是对于这种
    Collections.sort(list,(o1, o2) -> {
                return o1.getAge() - o2.getAge();
            });
    形式比较理解。
    回复 有任何疑惑可以回复我~ 2020-04-02 19:38:12
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号