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);

    }

}

 

 

 

 

posted @ 2021-08-20 02:07  漩涡·海绵宝宝  阅读(72)  评论(0)    收藏  举报