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());
}
结果依然是打印出。
lambda表达式的简单入门的更多相关文章
- 函数:lambda表达式 - 零基础入门学习Python021
函数:lambda表达式 让编程改变世界 Change the world by program lambda表达式 Python允许使用lambda关键字来创建匿名函数.我们提到一个新的关键字:匿名 ...
- Java中Lambda表达式的简单使用
Lambda表达式是Java SE 8中一个重要的新特性.你可以把 Lambda表达式 理解为是一段可以传递的代码 (将代码像数据一样进行传递).可以写出更简洁.更灵活的代码.作为一种更紧凑的代码风格 ...
- C# lambda表达式(简单易懂)
前言 1.天真热,程序员活着不易,星期天,也要顶着火辣辣的太阳,总结这些东西. 2.夸夸lambda吧:简化了匿名委托的使用,让你让代码更加简洁,优雅.据说它是微软自c#1.0后新增的最重要的功能之一 ...
- 对委托 以及 action func 匿名函数 以及 lambda表达式的简单记录
class Program { public delegate void MyDelegate(string str); static void Main(string[] args) { // My ...
- python 用lambda表达式代替简单的函数, 匿名函数
lambda 函数是一种快速定义单行的最小函数,可以用在任何需要函数的地方 格式: lambda 参数列表:return [表达式] 变量 由于lambda返回的是函数对象(构建的是一个函数对象),所 ...
- Funq之Lambda表达式入门
今天接受了一个Tranning关于.net3.5 framework中的new feature. 其中最不明白的还是Lambda表达式.回来后又仔细的思考了一番,总算有点体会在这里写一下.既然是入门, ...
- 3分钟入门lambda表达式
本节是lambda表达式的一个入门课,讲解的同时配有练习demo 前言什么是lambda表达式?基础语法函数式接口自己实现一个函数式接口jdk提供的函数式接口Consumersupplierfunct ...
- Lambda表达式(一)入门认识篇
Lambda表达式(一)入门认识篇 Lambda简介 Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极 ...
- Java Lambda表达式入门[转]
原文链接: Start Using Java Lambda Expressions http://blog.csdn.net/renfufei/article/details/24600507 下载示 ...
随机推荐
- html中调用本地exe应用程序
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- oop的三大特点
1.封装性:也称为信息隐藏,就是将一个类的使用和实现分开,只保留部分接口和方法与外部联系,或者说只公开了一些供开发人员使用的方法.于是开发人员只 需要关注这个类如何使用,而不用去关心其具体的实现过程, ...
- 51nod 1278【贪心】
主要这道题没有包含的情况,所以直接搞个左端,然后对于每个二分求一下>right的最近的位置j,那么ans就会增加 j 以后的: #include <cstdio> #include ...
- 計蒜客/小教官(xjb)
題目鏈接:https://nanti.jisuanke.com/t/366 題意:中文題誒~ 思路: 先通過給出的條件構造一個符合題意的數組(可以是任意一個符合條件的數組,菜雞不會證明: 然後構造的數 ...
- Faster_Rcnn在windows下运行踩坑总结
Faster_Rcnn在windows下运行踩坑总结 20190524 今天又是元气满满的一天! 1.代码下载 2.编译 3.下载数据集 4.下载pre-train Model 5.运行train ...
- 01 | VIM基础攻略
启动 vim 后,vim 处于 normal 模式. Step One: "i" -> insert 模式, ESC -> normal 模式: "x&quo ...
- Spring源码(一)
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</lis ...
- mysql整理(个人)
注意:以下命令都是在Linux系统下执行的: 1.验证mysql是否安装成功: mysqladmin --version 2.连接mysql服务器: mysql -u root -p 之后输入密码 3 ...
- [BZOJ5219]最长路径
Description 在Byteland一共有n个城市,编号依次为1到n,它们之间计划修建n(n-1)/2条单向道路,对于任意两个不同的点i和 j,在它们之间有且仅有一条单向道路,方向要么是i到j, ...
- GYM 101889B(找规律)
乍一看很唬人,草稿纸上多写几个发现规律:两个元音算一层,像剥洋葱一样,外面的其实都动不了,能变顺序的只有最里层的辅音. inline bool ok(char ch) { return ch == ' ...