day22、Lambda表达式,Stream流

1、Lambda表达式
Arrays.asList(),alt+enter快速创建一个集合。()可以传值,会保存到创建的集合中
不是所有的匿名内部类都能用lambda表达式写,因为接口里可能不止一个方法
能用Lambda表达式写的都可以写成匿名内部类
1.1 介绍
● Lambda表达式是一种没有名字的函数,是Java 8 发布的最重要新特性。
● 本质上是一段匿名内部类,也可以是一段可以传递的代码。
● 还有叫箭头函数的…
1.2 特点
● 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑。

public static void main(String[] args) {
    List<Integer> list = Arrays.asList(2, 5, 3, 4,6);
//        integer代表list的每一项,如果如多个参数需要写在()里
//         箭头后面代表对interger参数的操作,
//        如果只有一行操作不用加{}
//        有多个操作必须加大括号
    list.forEach(integer -> System.out.println(integer));
    System.out.println("========================== ");
    list.forEach((integer) -> {
        integer+=2;
        System.out.println(integer);
    });
}

● integer代表list的每一项,如果如多个参数需要写在()里
● 箭头后面代表对interger参数的操作,
● 如果只有一行操作不用加{}
● 有多个操作必须加大括号
● 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值
● 如果只有一条语句,并且是返回值语句,就可以不写return 不写 {}
● 如果写上{} 就必须写return 和 ;
● 如果有 多条语句,必须写{} return 和 ; 也必须写
2、函数式接口
@FunctionalInterface标记这个接口是一个函数式接口
其本质是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。
函数式接口是仅制定一个抽象方法的接口
3、Stream API
概念
● 数据渠道、管道,用于操作数据源(集合、数组等)所生成的元素序列。
● 集合讲的是数据,流讲的是计算
● 即一组用来处理数组,集合的API。
特点
● Stream 不是数据结构,没有内部存储,自己不会存储元素。
● Stream 不会改变源对象。相反,他们会返回一个持有结果的新Stream。
● Stream 操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。
创建stream的五种方法
● 1、Stream.of(数组)
● 2、list的成员方法stream()
● 3、Stream.generate()
● 4、Stream.iterate()
● 5、String类的成员方法chars
中间算子
● filter:过滤,满足条件的留下
● distinct:去重
● limit:取前几个
● skip:跳过几个
● sorted:排序
● map:遍历集合对每一项进行操作
List list = Arrays.asList(2, 4, 3, 5, 1,5,4);

    //1、filter过滤满足条件的留下
    Stream<Integer> stream = list.stream();
    stream.filter(x->{
        if (x<4){
            return true;
        }else {
            return false;
        }
    }).forEach(x-> System.out.println(x));
    System.out.println("=======================");
    //2、distinct 去重
    stream = list.stream();
    stream.distinct().forEach(x-> System.out.println(x));// stream has already been operated upon or closed
    System.out.println("=======================");
    //3、skip 跳过
    stream = list.stream();
    stream.skip(2).forEach(x-> System.out.println(x));
    System.out.println("=======================");
    //4、limit 限制只取限制的个数
    stream = list.stream();
    stream.limit(2).forEach(x-> System.out.println(x));
    System.out.println("=======================");
    //5、sorted
    stream = list.stream();
    stream.sorted((x,y)->y-x).forEach(x-> System.out.println(x));
    System.out.println("=======================");
    //6、map
    stream = list.stream();
    stream.map(x->x+"~~~").forEach(x-> System.out.println(x));
}

终止算子
foreach

public static void main(String[] args) {
    List<Integer> list = Arrays.asList(2, 4, 3, 5, 1,5,4,8);
    //1、min第一个值
    Stream<Integer> stream = list.stream();
    Optional<Integer> min = stream.map(x -> x + 2).min((x, y) -> y - x);
    Integer integer = min.get();
    System.out.println(integer);
    System.out.println("===================");
    //2、max最后一个值
     stream = list.stream();
    Optional<Integer> max = stream.map(x -> x + 2).max((x, y) -> y - x);
    Integer integer1 = max.get();
    System.out.println(integer1);
    System.out.println("======================");
    //3、求元素序列长度
    stream = list.stream();
    long count = stream.count();
    System.out.println(count);
    System.out.println("======================");
    //4、average
    stream = list.stream();
    System.out.println("======================");
    //5、collect 收集器,可以返回一个list或者set
    stream = list.stream();
    List<Integer> list1 = stream.map(x -> x + 10).collect(Collectors.toList());
    System.out.println(list1);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值