前言:本人在看《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());
}

  结果依然是打印出

lambda表达式的简单入门的更多相关文章

  1. 函数:lambda表达式 - 零基础入门学习Python021

    函数:lambda表达式 让编程改变世界 Change the world by program lambda表达式 Python允许使用lambda关键字来创建匿名函数.我们提到一个新的关键字:匿名 ...

  2. Java中Lambda表达式的简单使用

    Lambda表达式是Java SE 8中一个重要的新特性.你可以把 Lambda表达式 理解为是一段可以传递的代码 (将代码像数据一样进行传递).可以写出更简洁.更灵活的代码.作为一种更紧凑的代码风格 ...

  3. C# lambda表达式(简单易懂)

    前言 1.天真热,程序员活着不易,星期天,也要顶着火辣辣的太阳,总结这些东西. 2.夸夸lambda吧:简化了匿名委托的使用,让你让代码更加简洁,优雅.据说它是微软自c#1.0后新增的最重要的功能之一 ...

  4. 对委托 以及 action func 匿名函数 以及 lambda表达式的简单记录

    class Program { public delegate void MyDelegate(string str); static void Main(string[] args) { // My ...

  5. python 用lambda表达式代替简单的函数, 匿名函数

    lambda 函数是一种快速定义单行的最小函数,可以用在任何需要函数的地方 格式: lambda 参数列表:return [表达式] 变量 由于lambda返回的是函数对象(构建的是一个函数对象),所 ...

  6. Funq之Lambda表达式入门

    今天接受了一个Tranning关于.net3.5 framework中的new feature. 其中最不明白的还是Lambda表达式.回来后又仔细的思考了一番,总算有点体会在这里写一下.既然是入门, ...

  7. 3分钟入门lambda表达式

    本节是lambda表达式的一个入门课,讲解的同时配有练习demo 前言什么是lambda表达式?基础语法函数式接口自己实现一个函数式接口jdk提供的函数式接口Consumersupplierfunct ...

  8. Lambda表达式(一)入门认识篇

    Lambda表达式(一)入门认识篇 Lambda简介 Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极 ...

  9. Java Lambda表达式入门[转]

    原文链接: Start Using Java Lambda Expressions http://blog.csdn.net/renfufei/article/details/24600507 下载示 ...

随机推荐

  1. 17.Identity Server 4回顾

    openIdConnect做完之后,在登陆之后这个RequireConsent.用户同意授权这一步没有做直接跳过了,可以理解为我们自己比较信任的这种客户端 就是这个应用是属于我们自己的,都是我们自己配 ...

  2. JavaScript 基础 (变量声明, 数据类型, 控制语句)

    创建: 2017/09/16 更新: 2017/09/24 更改标题 [JavaScript 概要]-> [JavaScript 基础] 完成: 2017/09/25 更新: 2017/10/0 ...

  3. Codeforces 625B【KMP】

     题意就是一个串在另一个串出现几次,但是字符不能重复匹配, 比如aaaaaaa aaaa的答案是1 思路: 本来写了个暴力过的,然后觉得KMP改改就好了,就让队友打了一个: #include < ...

  4. JAG Practice Contest for ACM-ICPC Asia Regional 2016 C题【贪心】

    camp给出的题解: 题解:贪心,先算出最小需要的长度.然后从左到右依次确定每一位.复杂度O(n)O(n) 长度为 2n2n 的串可以构造出需要 [0,1+3+...+2n-1][0,1+3+...+ ...

  5. MongoDb 抛出"Error retrieving nonce"异常

    MongoDb在读取一个数据时抛出此异常, google之后也是只有源码没有任何相关结果, 考虑到之前同样的Db下不同的Collection没有发现此问题, 对比之后发现出错的url为: mongod ...

  6. hdu1848(sg函数打表)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1848 题意:中文题诶- 思路:直接sg函数打表就好了 代码: #include <iostrea ...

  7. [Xcode 实际操作]八、网络与多线程-(14)使用网址会话对象URLSession将地理坐标转换为地名

    目录:[Swift]Xcode实际操作 本文将演示如果通过网址会话对象,将地理坐标转换为地名. 网址会话对象URLSession具有在后台上传和下载.暂停和恢复网络操作.丰富的代理模式等优点. 在项目 ...

  8. 区间质数查询 luoguP1865

    原题 https://www.luogu.org/problemnew/show/P1865 本来get到了一个很好的判断素数的方法 O(玄学常数)https://www.luogu.org/blog ...

  9. TYVJ1432 楼兰图腾

    Description 平面上有 N(N≤[10]^5 ) 个点,每个点的横.纵坐标的范围都是 1~N,任意两个点的横.纵坐标都不相同.若三个点 (x_1,y_1),(x_2,y_2),(x_3,y_ ...

  10. day03 System Math