Java8新特性: Lambda helloworld

这里是小冷的博客
优质技术好文见专栏
个人公众号,分享一些技术上的文章,以及遇到的坑
当前系列:Java8 新特性 系列
源代码 git 仓库 代码 Git 仓库地址

Java8 新特性

Java 8 (又称为 jdk 8 ) 是java语言开发的一个主要版本,Java8是 oracle 公司 2014 4月发布的,可以看成自java5 以来最具革命性的版本,Java 8 为java 语言,编译器,类库,开发功能与JVM带来了大量的新特性

Java 8 新特性介绍

  • 速度更快
  • 代码更少(增加了 新的语法 :Lambada 表达式)
  • 强大的 Stream API
  • 便于并行 提高程序的运行速度 例: 遍历长度为 100k的数组 快速排序快了 4.7倍
  • 最大化减少空指针异常 Optional
  • Nashom 引擎:允许Jvm上运行JS应用

Lambda表达式(重点)

为什么要使用Lambda 表达式

lambda 表达式是一个匿名函数 ,我们可以把Lambda 表达式理解为是一段可以传递的代码,(将代码像数据一样进行·传递),使用它可以写出更简洁更灵活的代码,作为一种更紧凑的代码风格,使用java的语言表达能力得到了提升.

理论+实践方便理解

Lambda 表达式 coding

简单的用 Lambda做一个hello world的演示

  • 这个语法主要做的就是简化了我们语法
  • 帮我们省去的大多固定要编写的东西
  • 从而达到 语法的简化
/**
 * @author : <h2>冷环渊</h2>
 * @date : 2021/12/10
 * @context:<h4>Lambda 表达式 实操案例</h4>
 */
public class LambdaTest {
    /**
     * <h2>示例 1  无参数 传统语法 和 lambda 表达式的区别</h2>
     */
    @Test
    public void Test1() {
        // 传统 的 创建一个 线程 打印
        Runnable r1 = new Runnable() {

            @Override
            public void run() {
                System.out.println("我爱北京天安门");
            }
        };
        r1.run();

        System.out.println("****************************");


        // 用 lambda 表达式 的方法
        Runnable r2 = () -> System.out.println("我爱看北京天安门");
        r2.run();
    }

    /**
     * @return :  * @return : null
     * @author : <h2>冷环渊</h2>
     * @date : 2021/12/10
     * @context: <h3>有参数的 Lambda 表达式 传统和 新语法</h3>
     * @params :  null
     */
    @Test
    public void Test2() {
        //传统的语法 对象 实现对应方法
        Comparator<Integer> com1 = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return Integer.compare(o1, o2);
            }
        };
        int compare1 = com1.compare(12, 21);
        System.out.println(compare1);
        System.out.println("***********************");
        /*
         *  lambda表达式 有参数 语法
         *  函数式接口 使用这个接口你一定要实现且只要是先一个接口的时候就可以使用 Lambda 表达式
         *   @FunctionalInterface
         *   public interface Comparator<T> {
         *   int compare(T o1, T o2);
         *    }
         *  使用之后 就变成来很简洁的语法  他代替我们省区了很多已知的东西
         *  Comparator<Integer> com2 = (o1, o2) -> Integer.compare(o1, o2);
         * */
        Comparator<Integer> com2 = (o1, o2) -> Integer.compare(o1, o2);
        int compare2 = com2.compare(32, 21);
        System.out.println(compare2);
        System.out.println("***********************");

        //我们还可以更加的简化
        //方法引用
        Comparator<Integer> com3 = Integer::compare;
        int compare3 = com3.compare(20, 21);
        System.out.println(compare3);
        System.out.println("***********************");
    }

}

简单的认识了一下 Lambda表达式,我们来看看 不同情况下的lambda表达式的语法变化

/**
 * @author : <h2>冷环渊</h2>
 * @date : 2021/12/10
 * @context: <h4>
 * 1. 举例子(o1,o2)-> Integeer.compare(o1,o2)
 * 2.格式:
 * -> Lambda操作符 或者叫箭头操作符
 * ()形参列表 相当于是接口中的抽象方法的参数列表,可以省去类型
 * ->右边 Lambda体 其实就是重写抽象对象的方法体
 * 3.Lambda 表达式的使用(有六种情况可以介绍)
 * 4.本质 Lambda 表达式的本质:作为接口的实例
 * </h4>
 */
public class LambdaTest1 {
    /**
     * @return :  * @return : null
     * @author : <h2>冷环渊</h2>
     * @date : 2021/12/10
     * @context: <h3>语法格式一 :没有参数 没有返回值 </h3>
     * @params :  null
     */
    @Test
    public void Test1() {
        // 传统 的 创建一个 线程 打印
        Runnable r1 = new Runnable() {

            @Override
            public void run() {
                System.out.println("我爱北京天安门");
            }
        };
        r1.run();

        System.out.println("****************************");


        // 用 lambda 表达式 的方法
        Runnable r2 = () -> System.out.println("我爱看北京天安门");
        r2.run();
    }

    /**
     * @return :  * @return : null
     * @author : <h2>冷环渊</h2>
     * @date : 2021/12/10
     * @context: <h3> 语法表达式二 Lambda 需要一个参数 但是没有返回值 </h3>
     * @params :  null
     */
    @Test
    public void test2() {
        //传统的区别
        Consumer<String> con = new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        };
        con.accept("谎言和誓言的区别");
        System.out.println("**************************");
        //使用lambda
        Consumer<String> con2 = (String s) -> {
            System.out.println(s);
        };
        con2.accept("给你一拳,再给你一拳");
    }

    /**
     * @return :  * @return : null
     * @author : <h2>冷环渊</h2>
     * @date : 2021/12/10
     * @context: <h3>语法格式三:数据类型可以省略,因为可以用编译器推算的出,称为 :”类型推断“ </h3>
     * @params :  null
     */
    @Test
    public void Test3() {
        //使用lambda 还可以再次简化
        Consumer<String> con2 = (String s) -> {
            System.out.println(s);
        };
        con2.accept("给你一拳,再给你一拳");

        //类型也可以省去
        Consumer<String> con1 = (s) -> {
            System.out.println(s);
        };
        con1.accept("我闪避,闪避 miss");
    }

    /**
     * @return :  * @return : null
     * @author : <h2>冷环渊</h2>
     * @date : 2021/12/10
     * @context: <h3> 类型推断的例子</h3>
     * @params :  null
     */
    @Test
    public void Test4() {
        List<String> list = new ArrayList<>();
        int[] arrpub = {
                1, 2, 3
        };
    }

    /**
     * @return :  * @return : null
     * @author : <h2>冷环渊</h2>
     * @date : 2021/12/10
     * @context: <h3>语法格式四:Lambda 只需要一个参数的时候,参数的小括号也可以省去</h3>
     * @params :  null
     */
    @Test
    public void Test5() {
        //类型也可以省去
        Consumer<String> con1 = (s) -> {
            System.out.println(s);
        };
        con1.accept("我闪避,闪避 miss");
        //参数只有一个小括号也可以省去
        Consumer<String> con2 = s -> {
            System.out.println(s);
        };
        con2.accept("我闪避,闪避 miss");
    }

    /**
     * @return :  * @return : null
     * @author : <h2>冷环渊</h2>
     * @date : 2021/12/10
     * @context: <h3>语法格式五 Lambda 需要两个以上的参数,多条执行语句,且可以有返回值 </h3>
     * @params :  null
     */
    @Test
    public void Test6() {
        Comparator<Integer> com1 = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                System.out.println(o1);
                System.out.println(o2);
                return o1.compareTo(02);
            }
        };
        System.out.println(com1.compare(12, 21));
        System.out.println(" ***************");
        Comparator<Integer> com2 = (o1, o2) -> {
            System.out.println(o1);
            System.out.println(o2);
            return o1.compareTo(02);
        };
        System.out.println(com2.compare(12, 21));
    }


    /**
     * @return :  * @return : null
     * @author : <h2>冷环渊</h2>
     * @date : 2021/12/11
     * @context: <h3>语法格式六:当Lambda体 只有一条语句的时候,return 与大括号若有都可以忽略 </h3>
     * @params :  null
     */
    @Test
    public void Test7() {
        Comparator<Integer> com1 = (o1, o2) -> {
            return o1.compareTo(o2);
        };
        System.out.println(com1.compare(12, 6));
        System.out.println("*********************");
        Comparator<Integer> com2 = (o1, o2) -> o1.compareTo(o2);
        System.out.println(com2.compare(12, 21));
    }

    @Test
    public void Test8() {
        Consumer<String> con1 = s -> {
            System.out.println(s);
        };
        con1.accept("想你的夜~~~~~~~~~");
        System.out.println("********************");
        Consumer<String> con2 = s -> System.out.println(s);
        con2.accept("我给你一拳");
    }
}

今天我们就先学习到这里,

总结

我们认识了 java8 新加入的语法,

  • 简化了 一些重复且固定的代码,增强了代码的简洁度
  • 缺点,降低了代码的可读性
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
Java 8引入了Function接口和Lambda表达式,这些新特性使得函数式编程变得更加容易和灵活。 Function接口是一个函数式接口,它定义了一个接受一个参数并返回一个结果的函数。它有一个抽象方法apply(),这个方法接受一个参数并返回一个结果。Function接口有多个默认方法可以组合成复杂的函数链,比如andThen()和compose()方法。 Lambda表达式是一种可以代替匿名内部类的语法,它可以用来创建函数式接口的实例。Lambda表达式由三个部分组成:参数列表、箭头符号和方法体。Lambda表达式的参数列表和方法体可以根据上下文自动推断,这使得代码更加简洁易读。 下面是一个使用Function和Lambda表达式的示例代码: ``` Function<Integer, Integer> square = x -> x * x; int result = square.apply(5); // result = 25 ``` 这个代码定义了一个Function接口的实例square,它接受一个整数参数并返回它的平方。然后我们可以调用这个实例的apply()方法来计算5的平方,结果为25。 Lambda表达式可以用来代替匿名内部类,使得代码更加简洁易读。比如下面这个代码: ``` Runnable runnable = new Runnable() { @Override public void run() { System.out.println("Hello, world!"); } }; ``` 可以使用Lambda表达式来简化为: ``` Runnable runnable = () -> System.out.println("Hello, world!"); ``` 这个代码定义了一个Runnable接口的实例runnable,它的run()方法会输出一条消息。Lambda表达式的箭头符号左侧没有参数,因为run()方法不接受任何参数。箭头符号右侧的方法体只有一条语句,因此可以省略大括号和分号。 总之,Java 8的Function和Lambda表达式为函数式编程带来了更加灵活和易用的工具,使得Java程序员可以更加方便地编写函数式风格的代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冷环渊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值