写最紧凑的代码---方法引用

写最紧凑的代码—方法引用

u=2124890573,2190248175&fm=26&gp=0

方法引用其实也是Lambda的一种,但是他比Lambda表达式更加紧凑。

方法引用的操作符为::,对于方法的引用有一下四种方式

  1. 静态方法引用

    基本语法 Class::static_method

    实例:

    创建一个Book类方便于演示

    package com.yunshan;
    
    /**
     * @Author zhangminghui
     * @Date 2020/12/10 15:54
     */
    public class Book {
    
        private String id;
        private String name;
        
        public Book() {
        }
        
        public Book(String name) {
            this.name = name;
        }
    
        public Book(String id, String name) {
            this.id = id;
            this.name = name;
        }
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public static int compareById(Book b1,Book b2){
            return b1.getId().compareTo(b2.getId());
        }
    
        public int compareById(Book book){
            return this.getId().compareTo(book.getId());
        }
    }
    

    创建几个Book对象,使用Book对象的id进行排序

    @Test
    public void Test_001(){
            Book b1 = new Book("202032","java编程思想");
            Book b2 = new Book("202011","C++入门");
            Book b3 = new Book("202001","计算机网络");
            List<Book> list = Arrays.asList(b1,b2,b3);
            list.sort(Book::compareByIdStatic);
            list.forEach(book -> System.out.println(book.getName()));
    }
    

    运行结果如下:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w4VS5C55-1607739945047)(C:\Users\zhangminghui\AppData\Roaming\Typora\typora-user-images\image-20201210161909485.png)]

  2. 特定对象的方法引用

    基础语法:instance::method

    示例:

    定义一个类去做Book的ID比较,这个类中的方法是非静态的

    package com.yunshan;
    
    /**
     * @Author zhangminghui
     * @Date 2020/12/10 16:15
     */
    public class CompareBook {
        public int compareById(Book b1, Book b2) {
            return b1.getId().compareTo(b2.getId());
        }
    }
    

    按照id排序

    @Test
    public void Test_002(){
            Book b1 = new Book("202032","java编程思想");
            Book b2 = new Book("202011","C++入门");
            Book b3 = new Book("202001","计算机网络");
            List<Book> list = Arrays.asList(b1,b2,b3);
            CompareBook compareBook = new CompareBook();
            list.sort(compareBook::compareById);
            list.forEach(book -> System.out.println(book.getName()));
    }
    

    运行结果如下:

    image-20201210162001924

  3. 特定类的任意对象的方法引用

    基本语法:Class::method

    示例:

    @Test
    public void Test_003(){
            Book b1 = new Book("202032","java编程思想");
            Book b2 = new Book("202011","C++入门");
            Book b3 = new Book("202001","计算机网络");
            List<Book> list = Arrays.asList(b1,b2,b3);
            list.sort(Book::compareById);
            list.forEach(book -> System.out.println(book.getName()));
    }
    

    运行结果如下:

    image-20201210163056244

  4. 构造方法引用

    基本语法: Class::new 或者 Class<T>::new

    示例:

    @Test
    public void Test_004() {
            // 无参构造
            Supplier<Book> supplier = Book::new;
            // 一个参数的构造
            Function<String, Book> function = Book::new;
            Book java = function.apply("Java");
            System.out.println(java.getName());
            // 两个参数的构造
            BiFunction<String, String, Book> biFunction = Book::new;
            Book c = biFunction.apply("202011", "C语言");
            System.out.println("ID: " + c.getId() + " name: " + c.getName());
    }
    

    运行结果如下:

    image-20201210164627388

方法引用将代码压缩到了极简的状态,使你的代码变得更加高大上,行动起来,用方法引用优化你的代码!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值