java8新特性学习一: lambda

    科技2024-12-25  4

    java8学习

    前言一、理解lambda二、初尝试lambda1.可以看这个知乎专栏2.函数式接口: 主要分为四种 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201007221716576.png#pic_center) 三、lambda进阶1手敲代码如下: 总结


    前言

    学习资源: https://www.yuque.com/pig4cloud/pig/muicu5


    提示:以下是本篇文章正文内容,下面案例可供参考

    一、理解lambda

    触动点: 行为参数化 ( 与值参数化比较 )

    二、初尝试lambda

    1.可以看这个知乎专栏

    2.函数式接口: 主要分为四种

    三、lambda进阶

    1手敲代码如下:

    两点触动: 1. 使用实现接口 (Predicate ) 的方式替换if语句 2. 使用 (Function ) 接口进行类型转换 package com.zero.study2java8.lambda.lesson3; import com.zero.study2java8.lambda.lesson1.Project; import java.util.ArrayList; import java.util.List; import java.util.function.Function; import java.util.function.Predicate; /** * lambda使用 */ public class Lambdas { //准备数据 public static List<Project> buildData(){ List<Project> data = new ArrayList<>(); data.add(Project.builder().name("Blade").language("java").star(3500).build()); data.add(Project.builder().name("Tale").language("java").star(2600).build()); data.add(Project.builder().name("Elves").language("java").star(200).build()); return data; } public static void main(String[] args) { List<Project> projects = buildData(); List<String> names = getNames(projects, project -> project.getStar() > 1000); List<String> names1 = getNames(projects, project -> project.getStar() > 1000, Project::getLanguage); List<Integer> stars = getNames(projects, project -> project.getStar() > 1000, ProjectFunction.buildStarFunction()); // System.out.println(names); System.out.println(names1); } //获取项目的名字 //并且根据条件过滤 ==> 这种条件过滤方式也很高级啊 public static List<String> getNames(List<Project> projects, Predicate<Project> predicate){ List<String> names = new ArrayList<>(); for (Project project : projects) { if(predicate.test(project)){ names.add(project.getName()); } } return names; } //获取项目的名字 //并且根据条件过滤 //并且进行类型转换 ==> 重点 public static <R> List<R> getNames(List<Project> projects, Predicate<Project> predicate , Function<Project , R> function){ List<R> names = new ArrayList<>(); for (Project project : projects) { if(predicate.test(project)){ names.add(function.apply(project)); } } return names; } } //前面都是继承接口, 其实可以自定义接口 interface ProjectFunction<R> extends Function<Project , R>{ static ProjectFunction<Integer> buildStarFunction(){ return Project::getStar; } }

    总结

    学好lambda是为了学习Stream打下基础 . 原学习资料有一个不好的地方, 就是代码托管在github . 建议在gitee也放一份.

    Processed: 0.035, SQL: 8