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