CTimet 2021-11-26 19:21 采纳率: 84%
浏览 20
已结题

Help!有人能为我解读这段代码的意思和工作过程以及原理吗

问题遇到的现象和发生背景 :

在《Java核心技术 卷I》中有这样一段代码

问题相关代码:
var planets = new String[] {"Mei","Ve","Earth"};
System.out.println(Arrays.toString(planets));
Arrays.sort(planets);
System.out.println(Arrays.toString(planets));
System.out.println("Length:");
Arrays.sort(planets,(first,second) -> first.length() - second.length());
System.out.println(Arrays.toString(planets));

在里面有这样一段Lambda表达式:
(first,second) -> first.length() - second.length()
以及它所在的语句:
Arrays.sort(planets,(first,second) -> first.length() - second.length());
这里我不理解的是,为什么我在Java的API网站上没有寻找到sort方法的格式是(参数1,参数2)的

Java API的sort方法:

img


img

编辑器(IDEA)的运行结果:

img

我想要知道的

1.为什么Java API网站上没有关于sort方法的双参数方法?API上的sort方法都只有1个参数或3个参数。而在源代码中存在2个参数。分别是数组planets和Lambda表达式。那么,是不是我理解错了,或许Lambda表达式根本不是一个参数?如果不是,那它在这里的作用是什么?怎么运行的?
2.为什么要向sort方法传入一个Lambda表达式?这里这个Lambda表达式起到了什么作用?为什么最后传入Lambda表达式后排序后的数组由[Earth, Mei, Ve]变成了[Ve, Mei, Earth]?这里的原理是什么?它是如何工作的?

我希望各位回答者:

1.尽量回答全,保证答案中含有上面2个问题的答案
2.能够以通俗的语言(好理解)解释Lambda表达式是如何工作的。尽力做到这一点

在此,致谢!
  • 写回答

1条回答 默认 最新

  • 机智的爆爆哥 2021-11-27 18:24
    关注

    用的其实就是两个参数的方法
    public static <T> void sort(T[] a, Comparator<? super T> c)

    public class Demo2 {
        public static void main(String[] args) {
            User user1 = new User(1,"A");
            User user2 = new User(2,"B");
            User user3 = new User(3, "C");
            User[] users = new User[3];
            users[0] = user1;
            users[1] = user2;
            users[2] = user3;
            //里面用了Comparator 传入的是lambda表达式 这里 根据id排序 当结果<0 升序 否则降序
            Arrays.sort(users, (u1, u2) -> u2.getId() - u1.getId());
            //打印
            Arrays.stream(users).forEach(System.out::println);
            //结果
    //        User(id=3, name=C)
    //        User(id=2, name=B)
    //        User(id=1, name=A)
        }
    
    }
    
    @Data
    @AllArgsConstructor
    class User {
        private Integer id;
        private String name;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 12月6日
  • 已采纳回答 11月28日
  • 创建了问题 11月26日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改