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

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;
    }
    
    
    
    评论
    解决 无用
    打赏 举报 编辑记录

相关推荐 更多相似问题