Stream常用工具类

一、java.util.stream.Collectors 工具类

作用:将流(Stream)中的元素收集到集合或生成汇总结果。
常见方法

//  收集为  List/Set
List<String>  list  =  stream.collect(Collectors.toList());
Set<String>  set  =  stream.collect(Collectors.toSet());

// 拼接字符串
String joined = stream.collect(Collectors.joining(", "));

//  分组(按属性分组)
Map<String, List<Person>>  groupByName = persons.stream()
        .collect(Collectors.groupingBy(Person::getName));

//  分组后统计(如每组人数)
Map<String,  Long>  countByName  =  persons.stream()
        .collect(Collectors.groupingBy(Person::getName, Collectors.counting()));

//  分块(按条件分为  true/false  两组)
Map<Boolean,  List<Person>> partitioned  =  persons.stream()
    .collect(Collectors.partitioningBy(p  ->  p.getAge()  >  18));

// 汇总统计(数值流专用)
IntSummaryStatistics stats = persons.stream()
    .collect(Collectors.summarizingInt(Person::getAge));

二、Optional 类的使用

目的:优雅处理可能为 null 的值,避免 NullPointerException
核心操作

// 创建  Optional
Optional<String> opt1 =  Optional.of("非空值"); //  值不可为null
Optional<String>  opt2 =  Optional.ofNullable(可能为null的值);

//  安全访问值
opt.ifPresent(value  ->  System.out.println(value)); //  值存在时执行

//  默认值处理
String  value  = opt.orElse("默认值");  
String value  =  opt.orElseGet(()  -> "延迟计算的默认值");  

//  异常处理
String  value  =  opt.orElseThrow(() ->  new  NotFoundException());

// 链式操作
Optional<Address>  address =  user.flatMap(User::getProfile)
                               .flatMap(Profile::getAddress);

三、函数式接口

定义:仅包含一个抽象方法的接口,可用 Lambda 表达式实现。
常见接口

  1. Predicate<T>
    测试条件,返回布尔值。
    Predicate<String> isLong  =  s  ->  s.length() >  10;
    list.stream().filter(isLong).forEach(System.out::println);
    

2. **`Function<T, R>`**    
   接受输入,返回转换后的结果。
   ```java
   Function<String, Integer>  toLength =  String::length;
   list.stream().map(toLength).forEach(System.out::println);
  ```

3.  **`Consumer<T>`**    
   消费数据,无返回值。
   ```java
Consumer<String> printer = System.out::println;
   list.forEach(printer);
  1. Supplier<T>
    提供数据(如工厂方法)。
    Supplier<LocalDate>  dateSupplier  = LocalDate::now;
    LocalDate today =  dateSupplier.get();
    

四、第三方流库:StreamEx

特点:增强 Java Stream API,提供更丰富的操作。
核心功能示例

  1. 原始类型流优化
    避免装箱开销:
      IntStreamEx.of(1,  2,  3).filter(x  ->  x  >  1).toArray();
    

2. **增强操作方法**    
   简化复杂操作:
  ```java
   //  合并连续相同元素
   StreamEx.of(1,  1,  2, 3).groupRuns((a,  b)  -> a.equals(b))
    .forEach(group -> System.out.println(group));

// 对 Entry 流操作(如  Map  的键值对)
   StreamEx.of(map).keys().toList();
  1. 便捷收集器
    快速生成集合:
     Map<String, List<Person>>  map = persons.stream()
      .groupingBy(Person::getName, Collectors.toList());
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值