首页 > 编程语言 >Java使用lamda表达式简化代码

Java使用lamda表达式简化代码

时间:2022-11-10 12:44:23浏览次数:40  
标签:lamda Java String void sayHi MyInterface ok public 表达式

代码,自然写的越简洁越好啦,写的人舒服,看的人也舒服,一切为了高效。

要把有限的时间花到其它有意思的事情上去。

目的

学习简化代码的思路,使用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可省,直接写值。

标签:lamda,Java,String,void,sayHi,MyInterface,ok,public,表达式
From: https://www.cnblogs.com/lurenjia-bky/p/16876475.html

相关文章

  • java 单例设计模式 懒汉式
    packagecom.tedu.test;/***单例设计模式懒汉式设计*优点:不会造成资源的浪费*缺点:会造成线程安全问题*/publicclasssingleonDemo{publicstatic......
  • JAVA第一天学习
    MARKDOWN学习   标题:#加空格为一级标题。双##加空格为二级标题,以此类推,最多为六级标题   字体:字体两边加双**为加粗字体,加单*为斜体,加三***为字体加粗斜体,......
  • 【java技术总结】java-8新特性:日期时间 API
    Java8通过发布新的Date-TimeAPI(JSR310)来进一步加强对日期与时间的处理。在旧版的Java中,日期时间API存在诸多问题,其中有:非线程安全−java.util.Date是非线......
  • JavaScript WEB怎么实现大文件上传
    ​ 1 背景用户本地有一份txt或者csv文件,无论是从业务数据库导出、还是其他途径获取,当需要使用蚂蚁的大数据分析工具进行数据加工、挖掘和共创应用的时候,首先要将本地文......
  • java单例设计模式 饿汉式
    packagecom.tedu.test;/***单例设计模式的实现饿汉式*缺点:比较浪费资源*优点:饿汉式实现方式不会存在线程安全问题*单例设计模式的原则:实例唯一*/publi......
  • [JavaScript-06]面向对象
    1.面向对象//大括号就是对象p={a:1,b:2,c:3,}//系统对象全部基于window//console.log(window);//window.alert(1);//alert(2);//console......
  • java表达式语言mvel2/ognl/spring-expression
    <!--https://mvnrepository.com/artifact/org.mvel/mvel2--><dependency><groupId>org.mvel</groupId><artifactId>mvel2</artifactId><version>2.4.14.Fina......
  • Java强校验日期格式
    Java强校验日期格式SimpleDateFormat//lenient默认为true,即为宽松模式,如需严格校验,则需设置lenient为falseStringdate="2021/02/29";SimpleDateFormatsdf=newS......
  • java 锁
    1.独占锁,共享锁,2.可重入锁,3.公平锁,非公平锁,4.乐观锁,悲观锁5.互斥锁/读写锁,6.分段锁7.偏向锁/轻量级锁/重量级锁,8.自旋锁锁升级,锁降级synchronized 中有偏向锁,轻......
  • simpread-获取 JavaScript 对象的键 _ D 栈 - Delft Stack
    本文由简悦SimpRead转码,原文地址www.delftstack.com使用Object.keys()方法获取javascript对象的键Object.keys()函数返回一个包含javascript对象键的数组......