当前位置: 首页 > news >正文

lambda表达式的简单入门

  

  前言:本人在看《Java核心技术I》的时候对lamdba表达式还不是太上心,只是当做一个Java 8的特性了解一下而已,可是在《Java核心技术II》里面多次用到,所以重新入门来学。

 


   

  看教程说()->3就是直接输出3这个数字,所以我这么写:

  System.out.println(()->3);

  果不其然,报错了,错误的提示是:The target type of this expression must be a functional interface.(该表达式的目标类型必须是功能性接口)。也就是时候再怎么不济,最起码接收这个表达式的变量类型也是一个功能性接口吧。本人是Java小白一个,不知道functional interface是什么,索性就直接拿个interface来写了。

public class LambdaTest{
    interface Test{
        void sayMessage(String message);
    }
    public static void main(String[] args) {
        Test t = message->System.out.println(message);
        t.sayMessage("3");  //为什么不能是int类型的3呢?因为在接口里面就已经声明了sayMessage方法的参数是一个String类型的变量。
    }
}

  以上一个很简单的输出语句。但是也要经过:创建接口->定义方法->实现方法这几个步骤才能实现System.out.println()语句。

 

  那假设我想要用lambda表达式进行加法运算呢?可以直接用()->1+2得到吗?答案是肯定不行啊!那可以直接用上面的代码修改成message->1+2吗?答案也是不行滴。为什么呢?请看报错的信息先:Void methods cannot return a value。当初是你要void,void就void,现在又要用int,把value return回来 。

  那么重新改下代码,改成这样子:

  interface Test{
        int sayMessage(String message);
    }
    public static void main(String[] args) {
        Test t = message->1+2;
        System.out.println(t.sayMessage("1"));
    }

  会发现,打印出来的值是3,传入的参数"1"没有任何作用,那留着"String message"这个参数做什么呢?过年加菜吗?所以可以改成:

 

  interface Test{
        int sayMessage();
    }
    public static void main(String[] args) {
        Test t = ()->1+2;  //此处不需要参数,因为lambda表达式中没有参数。
        System.out.println(t.sayMessage());
    }

 

  结果依然是打印出3

 

转载于:https://www.cnblogs.com/NYfor2018/p/9015901.html

相关文章:

  • 提交表单且不刷新页面
  • selenium+python 优化测试报告
  • Kylin性能调优记——业务技术两手抓
  • 编译时
  • 详解PHP魔术函数、魔术常量、预定义常量
  • 聊一聊session和cookie
  • 通过Struts2Web应用框架深入理解MVC
  • 酒店管理系统
  • 前端人工智能?TensorFlow.js 学会游戏通关
  • 从 源码 谈谈 redux compose
  • 【译】理解JavaScript:new 关键字
  • 开发者论坛一周精粹(第四十三期) 物联网全栈教程 ECSphp版本降级
  • Waymo宣布今年在凤凰城推出自动驾驶汽车打车服务,此前已获得商业执照
  • 数学随记—公式定理
  • docker操作使用
  • 【Leetcode】101. 对称二叉树
  • CentOS 7 修改主机名
  • dva中组件的懒加载
  • Java面向对象及其三大特征
  • Laravel 实践之路: 数据库迁移与数据填充
  • Leetcode 27 Remove Element
  • Lucene解析 - 基本概念
  • MySQL用户中的%到底包不包括localhost?
  • Redis字符串类型内部编码剖析
  • session共享问题解决方案
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 笨办法学C 练习34:动态数组
  • 从PHP迁移至Golang - 基础篇
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 巧用 TypeScript (一)
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 【干货分享】dos命令大全
  • #define与typedef区别
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (五)网络优化与超参数选择--九五小庞
  • (转)关于多人操作数据的处理策略
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • 、写入Shellcode到注册表上线
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET CORE Aws S3 使用
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .net Signalr 使用笔记
  • .net 发送邮件
  • .NET应用架构设计:原则、模式与实践 目录预览
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • @JSONField或@JsonProperty注解使用