美文网首页
java8系列之新特性Lambda引入原因分析

java8系列之新特性Lambda引入原因分析

作者: 摸摸脸上的胡渣 | 来源:发表于2020-02-09 09:59 被阅读0次

引言:虽然JDK11已经进入特性冻结状态,但是从我自身来讲,目前JDK8 Lambda、Stream的使用率还不算很高,这些都是很好用的API哎!那就重新总结一波,同时也帮助小伙伴们熟悉一下,一起使用Lambda、Stream!

摘要:本文旨在帮助大家了解Lambda的引入原因以及使用方法,是自己看过《java8 实战》的总结,有什么疑问,可以评论,也可以翻看《java8 实战》自己摸索。如果文中有错误,望不吝赐教。


咱们做开发的,最不想看到的局面就是需求频繁的改动,并且改动的没有意义。出于可以最小程度的修改代码来得到最大程度便捷的实现,java 8提出了一个概念——行为参数化

行为参数化

什么是行为参数化呢?可以这么理解:

行为 -> Function,没错就是一个函数。

参数化 -> 可像参数一样进行传递。

合起来就是,java 8中,引入了可以使得函数,像参数一样,进行传递的新特性。

在java 8之前,能够进行传递的只有变量(严格来说是变量的引用)。来到java 8,可以使用Lambda表达式来实现行为参数化。

具体实例分析

在java8还没有出现之前,你接到这样一个需求,帮助果农大爷,从库存中筛选指定标准的苹果,苹果的定义:

@Data
@ToString
public class Apple {

    private int weight;
    private String color;
    private String origin;

    public Apple() {
    }

    public Apple(int weight, String color) {
        this.weight = weight;
        this.color = color;
    }


    public Apple(int weight, String color, String origin) {
        this.weight = weight;
        this.color = color;
        this.origin = origin;
    }
}

大爷说:“孩砸,帮我筛选不同颜色的苹果,好卖!”。
于是乎,你撸出了下面的代码:

//筛选不同的颜色的苹果
    public static List<Apple> filterApplesByColor(String color,List<Apple> apples){
        List<Apple> result = new ArrayList<Apple>();
        for(Apple apple : apples){
            if(apple.getColor().equals(color)){
                result.add(apple);
            }
        }
        return result;
    }

大爷又说了:“孩砸,帮我筛选不同重量的苹果,好卖!”
于是乎,你又撸出了下面的代码:

//筛选不同重量的苹果
    public static List<Apple> filterApplesByWeight(int weight,List<Apple> apples){
        List<Apple> result = new ArrayList<Apple>();
        for(Apple apple : apples){
            if(apple.getWeight() > weight){
                result.add(apple);
            }
        }
        return result;
    }

结果,大爷又说:“孩砸,帮我筛选不同产地的苹果,好卖!”
老子不撸了!什么大爷!明明是刚实习的pm!
但是,pm不是T序列的(jd除外),你没有办法更改人家的思维逻辑,只能从自己的代码入手,当你仔细的观察了代码,发现上面两段代码,只有if块中不一样,渐渐地你陷入了沉思。。。
当存在很多重合的逻辑的时候,就要将重合的逻辑进行提取,抽象。于是乎你进行了抽象,首先,抽象出了一个接口

//这个接口的意义为:定义了筛选苹果的标准,所有筛选的类,都必须来实现这个接口,来达到多态。
@FunctionalInterface  //这个注释暂时按下不表,一会解释。
public interface ApplePredicate {

    boolean filter(Apple apple);

}

并且重新实现了按照颜色进行筛选的类,重写了其中的filter方法

public class RedAppleFilter implements ApplePredicate {

    @Override
    public boolean filter(Apple apple) {
        if (StringUtils.equals(apple.getColor(),"red")){
            return true;
        }
        return false;
    }
}

当我们对红色苹果进行筛选的时候,就可以这样编码:


相关文章

  • java8系列之新特性Lambda引入原因分析

    引言:虽然JDK11已经进入特性冻结状态,但是从我自身来讲,目前JDK8 Lambda、Stream的使用率还不算...

  • Java8常用的新特性总结

    一、Java8常用的新特性总结 1.1.Java8常用特性总览 1.2.lambda表达式 在Java8中引入了一...

  • Java8特性之Lambda、方法引用和Streams

    Java8特性之Lambda、方法引用和Streams Java8已经推出了好一段时间了,而掌握Java8的新特性...

  • Lambda 表达式

    Lambda 表达式 声明:java8新特性系列为个人学习笔记,参考地址点击这里,侵删!! Lambda 表达式,...

  • Lambda表达式相关

    前言 Lambda表达式是 java8 引入的一个新特性。其配合另一个新特性———函数式编程,可以有效的提高编码...

  • Java 8 Lambda表达式, 入门的最佳姿势

    Lambda 表达式,自从被Java8引入以来,真的堪称是最大最重量级的新特性。 Lambda丰富了功能化编程,简...

  • Java 8、9 语言新特性

    Java语言新特性 Java8 Java 8 新特性 Lambda 表达式 Lambda表达式(也叫做闭包)是Ja...

  • Java8 新增了非常多的特性

    新特性Java8 新增了非常多的特性,我们主要讨论以下几个: Lambda 表达式 − Lambda允许把函数作为...

  • java8

    现代化 Java - Java8 指南 JAVA8新特性(吐血整理) 理解 Lambda 表达式

  • JDK8新特性梳理

    JDK8新特性 1、Lambda表达式 1.1、基础语法: Java8中引入了一个新的操作符 "->" 该操作符称...

网友评论

      本文标题:java8系列之新特性Lambda引入原因分析

      本文链接:https://www.haomeiwen.com/subject/oosppftx.html