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新增)
一.静态代理 [代码示例] /*** * 静态代理:记录日志等,类是写好的,直接拿来用. 动态代理:随用随构建,临时抱佛脚 * 婚庆公司:代理角色,帮你搞婚庆的一切,布置房间等等 * 自己:真实角色, ...
随机推荐
- 【unity游戏入门】1 环境安装
作者 罗芭Remoo 2021年9月24日 这一个系列随笔记录如何使用unity引擎从零开始开发游戏,软件版本均使用最新版本 有关unity的背景介绍可以通过unity官网https://unity. ...
- 第九十七篇:CSS的选择器及优先级
好家伙,来补一点关于CSS的基础 1.id选择器 id 选择器可以为标有特定 id 的 HTML 元素指定特定的样式 使用#号来定义样式 2.class选择器 class 选择器用于描述一组元素的样式 ...
- 第八十九篇:Vue 重学插槽slot
好家伙, 1.什么是插槽? 插槽是vue为组件的封装者提供的能力.允许开发者在封装组件时, 把不确定的,希望由用户指定的部分定义为插槽 我们依然可以把它理解为一个占位符 1.1.插槽的基本用法 试 ...
- KingbaseES V8R6单实例外部备份故障案例
案例说明: 在KingbaseES V8R6单实例环境,配置外部备份服务器使用sys_backup.sh物理备份时,出现以下"WAL segment xxx was not archived ...
- KingbaseES 全局临时表
Postgresql 支持会话级别的临时表,表的存续期只在创建临时表的会话存活期间,会话退出后,临时表自动删除,表结构及数据也无法跨会话共享.KingbaseES 除了支持PG原生的临时表机制外,还支 ...
- 如何在 Jenkins CI/CD 流水线中保护密钥?
CI/CD 流水线是 DevOps 团队软件交付过程的基本组成部分.该流水线利用自动化和持续监控来实现软件的无缝交付.通过持续自动化,确保 CI/CD 流水线每一步的安全性非常重要.在流水线的各个阶段 ...
- 使用kubeoperator安装k8s集群时自带的traefik-ingress-controller
前提 承接上一篇文章:https://www.cnblogs.com/sanduzxcvbnm/p/15740596.html traefik-ingress-controller和nginx-ing ...
- 使用yum方式安装的openresty参数
nginx version: openresty/1.19.3.1 built by gcc 8.3.1 20190311 (Red Hat 8.3.1-3) (GCC) built with Ope ...
- 会话跟踪技术 - Cookie 和 Session 快速上手 + 登陆注册案例
目录 1. 会话跟踪技术概述 2. Cookie 2.1 Cookie的概念和工作流程 2.2 Cookie的基本使用 2.3 Cookie的原理分析 2.4 Cookie的使用细节 2.4.1 Co ...
- Es 学习笔记 (1)
目录 前言 什么是es? es数据组织类比 应用场景 核心概念 集群 节点(node) 索引(Index) 文档类型(Type) 文档(Document) Mapping 核心简单域类型 分片(sha ...
