文章目录提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
- 前言
- 一、Lambda表达式简介
- 二 Lambda表达式语法(用Lambda实现接口)
- 1首先定义一个借口
- 2 对接口使用Lamb表达式来实现其中方法
- 0 注意事项(重要)
- 1.标准Lambda使用方式
- 2.Lambda允许忽略参数类型
- 3.单行实现代码可以省略大括号和return
- 三 函数式编程
- 1 简介
- 2 实现例子(Predicate函数接口)
- 3 实现例子(Consumer函数接口)
- 4 实现例子(Function函数接口)
- 5 函数式编程总结
- 四 Stream流
- 1 简介
- 2 Stream流的五种创建方式
- 3 Stream的常用方法(简单的例子来学习)
- 总结
前言
经常在一些项目中见到莫名的语法?
那可能就是Lambda表达式了
下面我们来简单学习一下
学习自imooc慕课网
一、Lambda表达式简介
总而言之Lambda表达式让你的代码更简洁易懂
语法格式
package com.imooc.lambda;
public interface MathOperation {
public Float operate(Integer a ,Integer b);
}
2 对接口使用Lamb表达式来实现其中方法
0 注意事项(重要)
Lambda表达式只能实现有且只有一个抽象方法的接口,Java称为"函数式接口"
1.标准Lambda使用方式//1.标准Lambda使用方式
//约束条件:Lambda表达式只能实现有且只有一个抽象方法的接口,Java称为"函数式接口"
MathOperation addition = (Integer a,Integer b)->{
System.out.println("加法运算");
return a+b+0f;
};
System.out.println(addition.operate(5,3));
2.Lambda允许忽略参数类型
//2.Lambda允许忽略参数类型
MathOperation substraction = (a,b)->{
return a-b+0f;
};
System.out.println(substraction.operate(5,3));
3.单行实现代码可以省略大括号和return
MathOperation multiplication = (a,b)->a*b+0f;
System.out.println(multiplication.operate(5,3));
三 函数式编程
1 简介
其核心思想
将代码作为可重用数据带入到程序中运行(程序如何运行是根据我们传入的代码决定的)
是基于函数式借口来实现的
JDK8常用的函数接口位于java.util.function下
我们这里使用Predicate函数接口
观察其源代码
发现只有一个test()方法
我们使用lambda表达式进行重写
测试是否满足条件
package com.imooc.lambda;
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
public class PredicateSample {
public static void main(String[] args) {
Predicate predicate = n->n<4;
boolean result = predicate.test(10);
System.out.println(result);
List list = Arrays.asList(1,2,3,4,5,6,7,8,9,10);
filter(list,n->n%2==1); //取所有奇数
filter(list,n->n%2==0); //取所有偶数
filter(list,n->n>5 && n%2==0); //取所有大于5的偶数
}
public static void filter(List list , Predicate predicate){
for(Integer num:list){
if(predicate.test(num)){
System.out.print(num + " ");
}
}
System.out.println("");
}
}
3 实现例子(Consumer函数接口)
package com.imooc.lambda;
import java.util.function.Consumer;
public class ConsumerSample {
public static void main(String[] args) {
output(s-> System.out.println("向控制台打印:" + s));
output(s->{
System.out.println("向XXX网站发送数据包:" + s);
});
}
public static void output(Consumer consumer){
String text = "天将降大任于是人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为。";
consumer.accept(text);
}
}
4 实现例子(Function函数接口)
package com.imooc.lambda;
import java.util.Random;
import java.util.function.Function;
常用的两种 lambda表达式厉害
public class FunctionSample {
public static void main(String[] args) {
Function
String chars = “abcdefghijklmnopqrstuvxwyz0123456789”;
StringBuffer stringBuffer = new StringBuffer();
Random random = new Random();
for(int i = 0 ; i < l ; i++){
int position = random.nextInt(chars.length());
stringBuffer.append(chars.charAt(position));
}
return stringBuffer.toString();
};
String randomString = randomStringFunction.apply(32);
System.out.println(randomString);
}
}
5 函数式编程总结
四 Stream流
1 简介
1 基于数组进行创建 (使用Stream.of(数组))
Stream stream = Stream.of(arr);
stream.forEach(s->System.out.println(s));
2 基于集合进行创建(直接集合.Strem方法)
Stream stream = list.stream();
stream.forEach(s->System.out.println(s));package com.imooc.stream;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class StreamGenerator {
//1.基于数组进行创建
@Test
public void generator1(){
String[] arr = {"Lily" , "Andy" , "Jackson" , "Smith"};
Stream
3 Stream的常用方法(简单的例子来学习)
package com.imooc.stream;
import org.junit.Test;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class StreamMethod {
//提取集合中所有偶数并求和
@Test
public void case1(){
List
总结



