Java函数式编程&四种方法引用总结、Stream流高级用法-java8新特性四

 一、方法引用

       方法引用是一个语法糖,可以进一步简化Lambda表达式, 我们在使用lambda时,如果方法体中只有一个方法的调用的话,我们可以用方法引用进一步简化代码。

        推荐用法:我们在使用lambda时不需要考虑什么时候用方法引用,方法引用的格式是什么。我们只需要在写完lambda方法发现方法体只有一行代码,并且在方法的调用时使用快捷键尝试是否能转换成方法引用即可。

1.引用类的静态方法:

                                        类名::方法名

 使用前提
        如果我们在重写方法的时候,方法体中只有一行代码,并且这行代码是调用了某个类的静态方法,并且我们把要重写的抽象方法中所有的参数都按照顺序传入了这个静态方法中,这个时候我们就可以引用类的静态方法。

  private static void test22(){
        List<Author> authors = getAuthors();
        authors.stream()
                .map(author -> author.getAge())
                .map(new Function<Integer, String>() {
                    public String apply(Integer age){
                        return String.valueOf(age);
                    }
                });
    }

ALT+ENTER:

                

优化后:   类名::方法名

  private static void test22(){
        List<Author> authors = getAuthors();
        authors.stream()
                .map(author -> author.getAge())
                .map(String::valueOf);
    }
2.1 引用对象的实例方法:

                                           对象::方法名

使用前提
        如果我们在重写方法的时候,方法体中只有一行代码,并且这行代码是调用了某个对象的成员方法,并且我们把要重写的抽象方法中所有的参数都按照顺序传入了这个成员方法中,这个时候我们就可以引用对象的实例方法。 

    private static void test23(){
       StringBuilder sb = new StringBuilder();
       List<Author> authors = getAuthors();
       authors.stream()
               .map(author -> author.getName())
               .forEach(new Consumer<String>() {
                   @Override
                   public void accept(String name) {
                       sb.append(name);
                   }
               });
    }

 简化后: 对象::方法名

    private static void test23(){
       StringBuilder sb = new StringBuilder();
       List<Author> authors = getAuthors();
       authors.stream()
               .map(author -> author.getName())
               .forEach(sb::append);
    }
 2.2 关于System.out::println的解读:

        

  private static void test211(){
        Optional<Author> author = getAuthor();
        author.map(author1 -> author1.getAge()+10)
                .ifPresent(System.out::println);
    }

                 

                                        

这样就不能用:System.out::println了 :


3.引用类的实例方法:

                        ​​​​​​​        ​​​​​​​        ​​​​​​​         类名::方法名

 使用前提
        如果我们在重写方法的时候,方法体中只有一行代码,并且这行代码是调用了第一个参数的成员方法,并且我们把要重写的抽象方法中剩余的所有的参数都按照顺序传入这个成员方法中,这个时候我们就可以引用类的实例方法:

public class MethodDemo {
    interface UseString{
        String use(String str, int start, int length);
    }

    private  static String subAuthorName(String str,UseString useString){
        int length = 1;
        int start = 0;
        return useString.use(str,start,length);
    }
    public static void main(String[] args){
        subAuthorName("三更草堂",new UseString(){
            public String use(String str, int start, int length){
                return str.substring(start,length);
            }
        });
    }
}

 简化后:  类名::方法名 

    public static void main(String[] args){
        //方法引用是一个语法糖,可以进一步简化Lambda表达式:
        subAuthorName("三更草堂", String::substring);
    }

​​​​​​​ 

4.构造器引用

                                              类名::new 

 使用前提
        如果我们在重写方法的时候,方法体中只有一行代码,并且这行代码是调用了某个类的构造方法,并且我们把要重写的抽象方法中的所有参数都按照顺序传入了这个构造方法中,这个时候我们就可以引用构造器。

 

  private static void test24(){
        List<Author> authors = getAuthors();
        authors.stream()
                .map(author -> author.getName())
                .map(new Function<String,StringBuilder>(){
                    public StringBuilder apply(String name){
                        return new StringBuilder(name);
                    }
                })
                .map(sb -> sb.append("-三更").toString())
                .forEach(str -> System.out.println(str));
        
        authors.stream()
                .map(author -> author.getName())
                .map(StringBuilder::new)
                .map(sb -> sb.append("-三更").toString())
                .forEach(str -> System.out.println(str));
    }

        

明日春风
关注 关注
  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
写文章

热门文章

  • docker pull 镜像报错: missing signature key 6269
  • SpringBoot入门---脚手架 4836
  • 阿里云服务器开放端口的最最最正确的方法 3534
  • IDEA中的Project工程、Module模块的概念及创建导入(尚硅谷总结) 2981
  • 微信小程序--开启下拉刷新页面 2950

最新评论

  • IDEA中的Project工程、Module模块的概念及创建导入(尚硅谷总结)

    明日春风: https://blog.csdn.net/weixin_43913958/article/details/141316193?fromshare=blogdetail&sharetype=blogdetail&sharerId=141316193&sharerefer=PC&sharesource=weixin_53676834&sharefrom=from_link

  • IDEA中的Project工程、Module模块的概念及创建导入(尚硅谷总结)

    明日春风: 多module并列的项目可以看这篇文章

  • IDEA报错:java.nio.charset.MalformedInputException: Input length = 1

    超超不写代码: 如果不行,把idea生成的target文件夹删除了,再运行一次

  • docker pull 镜像报错: missing signature key

    m0_74111389: 跟着坐着做就能解决了

  • SpringSecurity学习总结(三更草堂)

    端前端后: https://github.com/shuhongfan/SpringSecurity_Demo04

大家在看

  • Java面试题———JVM篇 687
  • C/C++面试八股至臻总结版,一文带你彻底搞懂C/C++面试!
  • 微服务拆分真的要谨慎 237
  • 招聘技术研发类岗位,HR会考察候选人哪些方面?
  • Java(类型转换)

最新文章

  • 在springboot中使用filter
  • ComnandLineRunner接口, ApplcationRunner接口
  • @SpringBootApplication
2024
10月 4篇
06月 12篇
05月 4篇
04月 40篇
03月 51篇
02月 10篇
01月 7篇
2023年34篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家华阴玻璃钢景观雕塑商场国潮春节鼠年美陈汕尾玻璃钢动物雕塑手工制作吉安户外玻璃钢雕塑多少钱上街玻璃钢花盆花器澄迈县玻璃钢雕塑台州大型玻璃钢雕塑优势平凉广场玻璃钢雕塑厂家玻璃钢钢雕塑厂亳州玻璃钢雕塑玻璃钢雕塑国产品牌商场走道美陈长宁区玻璃钢雕塑设计镂空校园玻璃钢雕塑玻璃钢雕塑成型白银城市玻璃钢雕塑成都唐煌玻璃钢雕塑户内玻璃钢雕塑方法福建玻璃钢雕塑艺术品定制上海开业商场美陈市场报价云浮园林玻璃钢人物雕塑邵阳玻璃钢雕塑厂家哪家好玻璃钢雕塑镂空优质玻璃钢士兵雕塑室内玻璃钢雕塑公司晋城肖像玻璃钢卡通雕塑无锡商场中秋美陈宁夏人物玻璃钢雕塑哪家好玻璃钢雕塑设计制作特别推荐合肥玻璃钢熊猫雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化