java lambda表达式、stream流学习笔记

本文介绍Java中的Lambda表达式及Stream流操作,包括Lambda的基本语法、变量作用域限制及Stream的创建方式、常用操作方法等,如filter过滤、concat连接、map映射、flatMap扁平化、reduce规约、sort排序、distinct去重和collect收集。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、lambda表达式
1、lambda语法:

	(parameters) -> expression
或
(parameters) ->{ statements; }

其中paramter可为0个,也可为多个
(1)0个参数

() -> 1+2;

(2)1个参数

(x)-> x+1;
//一个参数可以省掉()写成
x -> x+1;
//或带上类型
(int x) -> x+1;

(3)2个参数

(x,y) -> x+y
//或带上类型
(Int x, int y) -> x+y;
2、变量作用域
ambda 表达式只能引用标记了 final 的外层局部变量,这就是说不能在 lambda 内部	修改定义在域外的局部变量,否则会编译错误

二、Stream
1、Stream流的创建方式
(1)直接创建

Stream<Integer> intStream = Stream.of(1,2,3);
(2)由其它对象间接创建
List<String> strList = Arrays.asList("ABC","B","C");
Stream<String>strStream = strList.stream();

2、Stream流的操作方法
(1)filter过滤

List<String> strlist = Arrays.asList("ABC","B","C");
        Stream<String> strStream = strlist.stream();
        Stream<String> strStream2 = strStream.filter(str->str.contains("B"));

(2)contact连接

String<String> stream = Stream.concat(Stream.of("1","2"),Stream.of("3","4"))
(3)map方法
//map结合lambda表达式打印list元素的平方数
List<Integer> intList = Arrays.asList(1,2,3);
        intList.stream().map(i->i*i).forEach(System.out::println);

(4)flatMap方法:对流中的元素进行lambda表达式运算并将结果替换掉原来的元素

        
        List<String> strlist = Arrays.asList("ABC","B","C");
        strlist.stream().flatMap(s->Stream.of(s.replace("B","-B-"))).forEach(System.out::println);

(5)reduce方法

        List<Integer> intList = Arrays.asList(1,2,3);
        System.out.println(intList.stream().reduce((x,y)->x*y).get());

(6)sort排序

//a、基本数据类型排序
        List<Integer> intList = Arrays.asList(2,1,5,3);
        intList.stream().sorted().forEach(System.out::println);
//b、特殊类型排序
 //  (A)类实现Comparable接口
        public class PlanPOJO extends BaseEntity implements Comparable<PlanPOJO> {
   // (B)重写compareTo方法
     @Override
    public int compareTo(PlanPOJO o) {
        return this.getLength().compareTo(o.getLength());
    }
    //(C)排序
    List<PlanPOJO> plans = findPlanBySettings(pojo,planType,cpName);
    plans=plans.stream().sorted().sorted(Comparator.comparing(PlanPOJO::getLength)).collect(Collectors.toList());

(7)distinct去重


        List<Integer> intList = Arrays.asList(2,1,5,3,5);
        intList.stream().distinct().forEach(System.out::println);

(8)collect方法

 List<Person> persons = Arrays.asList(
                new Person("zhangSan", 26),
                new Person("Lisi", 25),
                new Person("Wangwu", 45),
                new Person( "Zhaoliu", 62)
        );
  //按年龄分组
  Map<Integer, List<Person>> mPerson = persons.stream().collect(Collectors.groupingBy(Person::getAge));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值