java8新特性学习一: lambda


前言

学习资源: 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也放一份.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值