Lambda表达式
1.Lambda语法格式

约束条件:只能实现有且只有一个抽象方法的接口,Java称为 函数式接口
public interface MathOperation { public int operation(int a, int b); } public class Java8Tester { public static void main(String args[]){ // 类型声明 MathOperation addition = (int a, int b) -> a + b; // 不用类型声明 MathOperation subtraction = (a, b) -> a - b; // 大括号中的返回语句 MathOperation multiplication = (int a, int b) -> { return a * b; }; // 没有大括号及返回语句 MathOperation division = (int a, int b) -> a / b; System.out.println("10 + 5 = " + tester.operate(10, 5, addition)); System.out.println("10 - 5 = " + tester.operate(10, 5, subtraction)); System.out.println("10 x 5 = " + tester.operate(10, 5, multiplication)); System.out.println("10 / 5 = " + tester.operate(10, 5, division)); } }
2.函数式编程
函数式接口:只能实现有且只有一个抽象方法的接口
函数式接口注解:@FunctionalInterface
基于函数式接口并使用Lambda表达式的编程方式
函数式编程理念是将代码作为可重用数据代入程序运行中
函数式编程强调 你想做什么 而不是 你想怎么做
JDK8之后提供了一系列新的函数式接口,位于 java.util.function 包


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<String> list = Arrays.asList("1", "2", "3", "4", "5" , "6"); int sum = list.stream() //获取stream对象 .mapToInt(s->Integer.parseInt(s)) //mapToInt将流中每一个数据转为整数 .filter(n->n%2==0) //filter对流数据进行过滤 .sum();//求和 System.out.println(sum); } //所有名字首字母大写 @Test public void case2(){ List<String> list = Arrays.asList("lily","smith","jackson"); List newList = list.stream() //按规则对每一个流数据进行转换 .map(s->s.substring(0,1).toUpperCase() + s.substring(1)) //.forEach(s-> System.out.println(s)); //collect对流数据进行收集,生成新的List/Set .collect(Collectors.toList()); System.out.println(newList); } //将所有奇数从大到小进行排序,且不许出现重复 @Test public void case3(){ List<Integer> list = Arrays.asList(1,60,38,21,51,60,51,73); List newList = list.stream().distinct()//去除重复的流数据 .filter(n->n%2==1) .sorted((a,b)->b-a) //流数据排序 .collect(Collectors.toList()); System.out.println(newList); } }

浙公网安备 33010602011771号