Java_25_方法引用

这篇具有很好参考价值的文章主要介绍了Java_25_方法引用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

方法引用

方法引用:
方法引用是为了进一步简化Lambda表达式的写法。
方法引用的格式:类型或者对象::引用的方法。
关键语法是:“::”

 小结:
    方法引用可以进一步简化Lambda表达式的写法。
    关键语法是:“::”

范例代码:

public class MethodDemo01 {
    public static void main(String[] args) {
        List<Student> stu = new ArrayList<>();
        Student st1 = new Student("Java01");
        Student st2 = new Student("Java02");
        Student st3 = new Student("Java03");
        Collections.addAll(stu,st1,st2,st3);
        stu.forEach(System.out::println);  //方法引用简化!!
    }
}
class Student {
    private String name;
    public Student() {
    }
    public Student(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String toString() {
        return name;
    }
}

静态方法引用

  1. 方法引用有四种形式:

    1. 静态方法的引用。
    2. 实例方法的引用。
    3. 特定类型方法的引用。
    4. 构造器引用。
  2. 静态方法的引用。

    1. 引用格式:
      类名::静态方法。
    2. 简化步骤:
      1. 定义一个静态方法,把需要简化的代码放到一个静态方法中去。
    3. 静态方法引用的注意事项
      ” 重要:被引用的方法的参数列表要和函数式接口中的抽象方法的参数列表一致。“ 小结:
      静态方法引用的格式: 类名::静态方法。
      重要:被引用的方法的参数列表要和函数式接口中的抽象方法的参数列表一致,才可以引用简化!
public class MethodDemo02 {
    public static void main(String[] args) {
        List<Student> str = new ArrayList<>();
        Student s1 = new Student("李铭",18,'男');
        Student s2 = new Student("冯龙",23,'男');
        Student s3 = new Student("王乐乐",21,'男');
        Collections.addAll(str,s1,s2,s3);
        System.out.println(str);
        Collections.sort(str,Student::compareByAge); //简化
        System.out.println(str);
    }
}

实例方法引用

  1. 实例方法的引用
  2. 格式: 对象::实例方法。
  3. 简化步骤:
    a.定义一个实例方法,把需要的代码放到实例方法中去。
    实例方法引用的注意事项
  4. 重要:被引用的方法的参数列表要和函数式接口中的抽象方法的参数列表一致
public class MethodDemo01 {
    public static void main(String[] args) {
        List<String> lists = new ArrayList<>();
        lists.add("java1");
        lists.add("java2");
        lists.add("java3");

        // 对象是 System.out = new PrintStream();
        // 实例方法:println()
        // 前后参数正好都是一个
        lists.forEach(s -> System.out.println(s));
        lists.forEach(System.out::println);
    }
}

特定类型方法的引用

  1. 特定类型方法的引用。
  2. 特定类型:String ,任何类型。
    格式:特定类型::方法。
  3. 注意:
    如果第一个参数列表中的形参中的第一个参数作为了后面的方法的调用者,
    并且其余参数作为后面方法的形参,那么就可以用特定类型方法引用了。
public class MethodDemo01 {
    public static void main(String[] args) {
        String[] strs = new String[]{"James", "AA", "John",
                "Patricia","Dlei" , "Robert","Boom", "Cao" ,"black" ,
                "Michael", "Linda","cao","after","sBBB"};

        // public static <T> void sort(T[] a, Comparator<? super T> c)
        // 需求:按照元素的首字符(忽略大小写)升序排序!!!
        Arrays.sort(strs, new Comparator<String>() {
            @Override
            public int compare(String s1, String s2) {
                return s1.compareToIgnoreCase(s2);// 按照元素的首字符(忽略大小写)比较。
            }
        });
        Arrays.sort(strs, (String s1, String s2) -> {
                return s1.compareToIgnoreCase(s2);// 按照元素的首字符(忽略大小写)比较。
        });

        Arrays.sort(strs, ( s1,  s2 ) ->  s1.compareToIgnoreCase(s2));

        // 特定类型的方法引用:
        Arrays.sort(strs,  String::compareToIgnoreCase);

        System.out.println(Arrays.toString(strs));

    }
}

构造器引用

格式是:类名::new。
注意点:前后参数一致的情况下,又在创建对象就可以使用构造器引用
s -> new Student(s) => Student::new

小结:
方法引用是可遇不可求,能用则用,不能用就不要用!文章来源地址https://www.toymoban.com/news/detail-609244.html

public class ConstructorDemo01 {
    public static void main(String[] args) {
        List<String> lists = new ArrayList<>();
        lists.add("java1");
        lists.add("java2");
        lists.add("java3");

        // 集合默认只能转成Object类型的数组。
        Object[] objs = lists.toArray();
        System.out.println("Object类型的数组:"+ Arrays.toString(objs));

        // 我们想指定转换成字符串类型的数组!!
        // 最新的写法可以结合构造器引用实现 。
        // default <T> T[] toArray(IntFunction<T[]> generator)
        String[] strs = lists.toArray(new IntFunction<String[]>() {
            @Override
            public String[] apply(int value) {
                return new String[value];
            }
        });

        String[] strs1 = lists.toArray(s -> new String[s] );

        String[] strs2 = lists.toArray(String[]::new);

        System.out.println("String类型的数组:"+ Arrays.toString(strs2));


    }
}

到了这里,关于Java_25_方法引用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java基础知识——25.异常

    这篇文章,我们来讲一下java的异常体系 目录 1.异常概述 2 java的异常继承体系 2.1 编译时异常 2.2 运行时异常 2.3 底层原理 2.4 异常的作用 3.异常的处理方式 3.1 JVM默认的处理方式 3.2 自己处理(捕获异常) 3.2.1自己处理的4个问题 3.2.2 异常中的常见方法 3.3 抛出处理 3.3.1 throws

    2024年02月01日
    浏览(51)
  • 【Java高级语法】(十六)方法引用:掌握Java中的方法引用,简化代码的实用指南~

    方法引用是Java编程语言中的一个重要特性,它首次出现在Java 8版本中。这一特性旨在简化函数式编程中使用Lambda表达式的代码,使代码更加清晰、简洁。 方法引用是通过名称引用一个现有的方法来代替Lambda表达式的一种方式 。它允许将方法本身作为一个对象传递或存储,并

    2024年02月16日
    浏览(40)
  • Java8函数式接口, 方法引用, 构造器引用, 数组引用

    只包含一个抽象方法的接口,称为函数式接口。 你可以通过Lambda表达式来创建该接口的对象。(若Lambda表达式抛出一个受检异常(即:非运行时异常),那么该异常需要在目标接口的抽象方法上进行声明 我们可以在一个接口上使用 @Functionallnterface 注解,这样做可以检查它是

    2024年02月05日
    浏览(56)
  • 【Java 基础】引用型数组、Java 继承、super 关键字详解

    《 Java 零基础入门到精通 》 专栏持续更新中。通过本专栏你将学习到 Java 从 入门 到 进阶 再到 实战 的全套完整内容,所有内容均将集中于此专栏。无论是初学者还是有经验的开发人员,都可从本专栏获益。 订阅专栏后添加我微信或者进交流群,进群可找我领取 前端/Java

    2024年02月03日
    浏览(47)
  • Java8新特性—方法引用

    前言 Java 8引入了方法引用(method reference)作为一种语言特性,它可以简化代码,使得代码更加易读和易于维护。方法引用可以被视为Lambda表达式的简写形式,可以用来替代Lambda表达式中只调用一个已有方法的情况。总的来说该特性使得Java代码更加简洁和灵活。 使用场景 J

    2024年02月03日
    浏览(38)
  • Java中的方法引用--【基本使用详解】

    🎉博客首页:痛而不言笑而不语的浅伤 📢欢迎关注🥳点赞 👍 收藏 ⭐留言 📝 欢迎讨论! 🔮本文由痛而不言笑而不语的浅伤原创,CSDN首发! 🌋系列专栏:《JavaSE系列详解》 🧿首发时间:2022年5月27日 ❤:热爱Java学习,期待一起交流! 🙏🏻作者水平有限,如果发现错

    2024年02月06日
    浏览(46)
  • Java基础知识——类、静态、继承、引用类型使用

    类的定义格式如下: 例如: 例如: 1.3.1 封装的步骤 1.使用 private 来修饰成员变量。 2.使用 public 修饰getter和setter方法。 1.3.2 封装的步骤实现 private修饰成员变量 public修饰getter和setter方法 1.4.1 构造器的作用 通过调用构造器可以返回一个类的对象,构造器同时负责帮我们把

    2023年04月19日
    浏览(45)
  • 【从零开始学习JAVA | 第三十篇】方法引用

    目录 前言: 方法引用: 方法引用基本概念: 方法可以被引用的条件: 方法引用的种类: 方法引用的优点: 总结: 方法引用作为一个重要的知识点,虽然他使用起来很复杂,而且会降低代码的可读性,但是如果用好了方法引用,我们也会获得不错的效率,因此我们在今天

    2024年02月15日
    浏览(43)
  • Java 8新特性:方法引用的介绍与使用

    🎉🎉🎉 点进来你就是我的人了 博主主页: 🙈🙈🙈 戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔 🤺🤺🤺 目录 1. 什么是方法引用? 2. 方法引用的类型 3. 如何使用方法引用? 3.1 静态方法引用 (类名::静态方法) 3.2 特定对象的实例方法引用 (对象::方法名) 3.3 特定

    2024年02月10日
    浏览(42)
  • java: 无法从静态上下文中引用非静态 方法

    Java中静态上下文中无法引用非静态变量的解决办法: 一、为什么不能引用? 今天编写代码遇到 non-static variable mainframe cannot be referenced from a static context  经过了解知道了因为静态类的方法可以在没有创建实例对象时直接调用,而非静态的成员变量是一个对象属性,只有在对象

    2024年02月08日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包