Java使用lamda表达式简化代码
代码,自然写的越简洁越好啦,写的人舒服,看的人也舒服,一切为了高效。
要把有限的时间花到其它有意思的事情上去。
目的
学习简化代码的思路,使用jdk8新特性lamada表达式。
使用
某接口,只有一个方法。
比如这个:
package java.lang; @FunctionalInterface
public interface Runnable {
void run();
}
或者是这个:
interface MyInterface{
void sayHi();
}
实现接口,使用方法
一般我们要使用Runable子类开启一个线程,要实现Runnable接口,调用Threead类的start方法:
public class LeaningLamda implements Runnable{
public static void main(String[] args) {
new Thread(new LeaningLamda()).start();
}
@Override
public void run() {
System.out.println(this.getClass()+"我已经在跑了!");
}
}
或者用sayHi方法干点什么,要先实现接口,再调用:
public class LeaningLamda2 implements MyInterface{
public static void main(String[] args) {
new LeaningLamda2().sayHi();
}
@Override
public void sayHi() {
System.out.println("ok ok ok ok ,i am say Hi!");
}
}
interface MyInterface{
void sayHi();
}
内部类实现接口,使用方法
如果这个方法我就用一次,那我可以在内部类中实现它,提高程序性能:
public class LeaningLamda{
static class MyRun implements Runnable{
@Override
public void run() {
System.out.println(this.getClass()+"我已经在跑了!");
}
}
public static void main(String[] args) {
new Thread(new MyRun()).start();
}
}
一样的用sayHi方法:
public class LeaningLamda2 {
static class MyHi implements MyInterface{
@Override
public void sayHi() {
System.out.println("ok ok ok ok ,i am say Hi!");
}
}
public static void main(String[] args) {
new MyHi().sayHi();
}
}
interface MyInterface{
void sayHi();
}
局部内部类实现接口,使用方法
既然只使用一次,那我为啥不把它放在使用的方法里面去,性能不就又UpUpUpUp。
像这样:
public class LeaningLamda{
public static void main(String[] args) {
class MyRun implements Runnable{
@Override
public void run() {
System.out.println(this.getClass()+"我已经在跑了!");
}
}
//调用在定义后面,谢谢。
new Thread(new MyRun()).start();
}
}
或是这样:
public class LeaningLamda2 {
public static void main(String[] args) {
class MyHi implements MyInterface{
@Override
public void sayHi() {
System.out.println("ok ok ok ok ,i am say Hi!");
}
}
new MyHi().sayHi();
}
}
interface MyInterface{
void sayHi();
}
匿名内部类实现接口,使用方法
我就用一次,要什么名字啊?能少输入一个字符都是赚的。需要借助父类或者接口名来实现。
你看:
public class LeaningLamda{
public static void main(String[] args) {
//需要借助父类或者接口来声明
new Thread(new Runnable(){
@Override
public void run() {
System.out.println(this.getClass()+"我已经在跑了!");
}
}).start();
}
}
又如:
public class LeaningLamda2 {
public static void main(String[] args) {
new MyInterface(){
@Override
public void sayHi() {
System.out.println("ok ok ok ok ,i am say Hi!");
}
}.sayHi();
}
}
interface MyInterface{
void sayHi();
}
使用lamda表达式的,实现方法
jdk 8 看不下去了,给我们提供了一个更加简化的方案,你看:
lamda表达式实现创建单个简单线程:
public class LeaningLamda{
public static void main(String[] args) {
new Thread(()-> {
System.out.println("我已经在跑了!");
}
).start();
}
}
lamda表达式sayHi:
public class LeaningLamda2 {
public static void main(String[] args) {
//此处需要借助一个父类或接口对象来存放,调用它
MyInterface ls = ()->{
System.out.println("ok ok ok ok ,i am say Hi!"); };
ls.sayHi();
}
}
interface MyInterface{
void sayHi();
}
可带参数
lamda表达式可以带参数,可以不指定类型,它会自适应类型:
public class LeaningLamda2 {
public static void main(String[] args) {
MyInterface ls = (i,str)->{
System.out.println("int:"+i);
System.out.println("String:"+str);};
ls.sayHi(520,"i love you!");
}
}
interface MyInterface{
void sayHi(int i,String str);
}
运行结果:
一个参数
那我括号都可以省了!
public class LeaningLamda2 {
public static void main(String[] args) {
MyInterface ls = str-> System.out.println("String:"+str);
ls.sayHi("i love you!");
}
}
interface MyInterface{
void sayHi(String str);
}
运行结果:

返回值
如果有返回值呢,正常返回:
public class LeaningLamda2 {
public static void main(String[] args) {
MyInterface ls = (String str)-> {
String str2 = "最后的赢家是:"+str;
return str2;};
System.out.println(ls.sayHi("lurenjia"));
}
}
interface MyInterface{
String sayHi(String str);
}
一条语句
如果方法只有一条语句,那大括号也没有必要,可以省略:
public class LeaningLamda2 {
public static void main(String[] args) {
MyInterface ls = (int i,String str)-> System.out.println("int:"+i+"----String:"+str);
ls.sayHi(520,"i love you!");
}
}
interface MyInterface{
void sayHi(int i,String str);
}
究极省略,不能再省了
就一条语句,是返回值:
public class LeaningLamda2 {
public static void main(String[] args) {
MyInterface ls = str-> "最后的赢家是:"+str;
System.out.println(ls.sayHi("中国"));
}
}
interface MyInterface{
String sayHi(String str);
}
运行结果:

lamda总结
常用于创建简单线程。
1、接口只有一个方法,可有参数,可有返回值。
2、本方法内容简单,使用较少。
3、基本形式为:
接口或父类 名称 = (参数类型1 参数1,参数类型2 参数2,...)->{
内容
};
名称.方法(参数1,参数2,...);
4、可以省略的是:
1、lamada参数类型可省,它自适应。 2、方法内容只有一条内容,大括号可省。 3、内容只有一句返回语句,return可省,直接写值。
Java使用lamda表达式简化代码的更多相关文章
- Java的lamda表达式/函数式接口/流式计算
在我们看他人code的时候经常会看到,可能会经常看到lambda表达式,函数式接口,以及流式计算.在刚接触这些新功能时,也觉得真的有必要吗?但是现在写多了,发现这个功能确实能简化代码结构,提升编码效率 ...
- java中lamda表达式的应用
lamda表达式主要是为了解决匿名内部类的繁琐过程 范例:简单的lamda表达式 此处使用匿名内部类 package com.java.demo; interface IMessage{ public ...
- java的lamda表达式
Java8才支持lamda表达式 lamda是一中函数式编程语言 通过实现模式是匿名内部类 java使用内部类实现接口 首先定义一个接口 @FunctionalInterfaceinterface ...
- Java:用Lambda表达式简化代码一例
之前,调用第3方服务,每个方法都差不多“长”这样, 写起来啰嗦, 改起来麻烦, 还容易改漏. public void authorizeRoleToUser(Long userId, List< ...
- java中lamda表达式用法
map-> list Map<String, Object> map = new HashMap<>(); List<String> list = new A ...
- 为了去重复,写了一个通用的比较容器类,可以用在需要比较的地方,且支持Lamda表达式
为了去重复,写了一个通用的比较容器类,可以用在需要比较的地方,且支持Lamda表达式,代码如下: public class DataComparer<T>:IEqualityCompare ...
- 让操作javascript对象数组像.net lamda表达式一样
让操作javascript对象数组像.net lamda表达式一样 随着web应用程序的富客户端化.ajax的广泛使用及复杂的前端业务逻辑.对js对象数组.json数组的各种操作越来越多.越来越复杂. ...
- Java --Lamda表达式
Lamda:属于函数式编程的概念: interface IMessage { public void print() ; } public class TestDemo { public static ...
- [19/04/06-星期六] 多线程_静态代理(StaticProxy)和 lamda (简化代码,jdk8新增)
一.静态代理 [代码示例] /*** * 静态代理:记录日志等,类是写好的,直接拿来用. 动态代理:随用随构建,临时抱佛脚 * 婚庆公司:代理角色,帮你搞婚庆的一切,布置房间等等 * 自己:真实角色, ...
随机推荐
- 【java】学习路线11-四种权限修饰的测试
package com.remoo.test;public class Learn09_Test{ private static String welcomeWord1 = "你好,p ...
- IDEA整合Docker
创建项目 1.使用 IDEA 构建一个 SpringBoot 项目 2.编写一个helloController @RestController public class HelloController ...
- The 19th Zhejiang Provincial Collegiate Programming Contest
目录 A.JB Loves Math B.JB Loves Comma C. JB Wants to Earn Big Money G. Easy Glide I. Barbecue L. Candy ...
- 2021年3月-第02阶段-前端基础-Flex 伸缩布局-移动WEB开发_flex布局
移动web开发--flex布局 1.0 传统布局和flex布局对比 1.1 传统布局 兼容性好 布局繁琐 局限性,不能再移动端很好的布局 1.2 flex布局 操作方便,布局极其简单,移动端使用比较广 ...
- 网络基础七层模型与TCP/IP协议
1.网络基础 1.1 什么是网络 网络就是计算机网络是一组计算机或网络设备通过有形 的线缆或无形的媒介如无线,连接起来,按照一定的 规则,进行通信的集合. 网络通信就是指终端设备之间通过计算机网络进行 ...
- ingress-nginx 的使用 =》 部署在 Kubernetes 集群中的应用暴露给外部的用户使用
文章转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247488189&idx=1&sn=8175f067 ...
- 使用Jumpserver堡垒机管理MySQL应用
第一步,添加系统用户 资产管理,系统用户,创建<数据库协议>MySQL 用户名和密码填写实际可以访问数据库的用户名和密码 第二步,添加应用 应用管理,数据库 主机和端口填写可以访问数据库的 ...
- Elasticsearch:同步 MongoDB 数据到 Elasticsearch
转载自:https://elasticstack.blog.csdn.net/article/details/114639152 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写 ...
- jumpserver 2222端口的使用
可以这样理解: 通过在jumpserver的web界面添加的用户,相应的也有权限通过远程使用命令的方式登陆jumpserver,进行相应的管理,只不过使用的端口是2222端口,不是常见的22端口. 一 ...
- js对象结构赋值const {XXX } =this
样例1: const { xxx } = this.state; 上面的写法是es6的写法,其实就相当于: const xxx = this.state.xxx 样例2: const {comment ...
