You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Stream与Functional Interface实现数组含负数时抛出汇总异常?

使用Stream和函数式接口实现负数检查并抛异常

嘿,作为Stream和函数式接口的新手,能想到用它们来重构代码真的很棒!完全可以用它们来实现你的需求,而且代码会更简洁、更符合函数式编程的风格。

基础实现方式

首先,我们可以先通过Stream过滤出所有负数,收集到列表后再判断是否需要抛出异常,这和你原来的for循环逻辑一致,但代码更紧凑:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class NegativeCheckExample {
    public static void main(String[] args) {
        int[] input = {0, -1, -2};
        
        // 过滤并收集所有负数
        List<Integer> negatives = Arrays.stream(input)
                                        .filter(i -> i < 0) // 这里用到了Predicate函数式接口
                                        .boxed()
                                        .collect(Collectors.toList());
        
        // 判断并抛出异常
        if (!negatives.isEmpty()) {
            throw new IllegalArgumentException("Invalid integers: " + negatives);
        }
    }
}

这里的filter(i -> i < 0)其实就是实现了Predicate<Integer>这个函数式接口,这正是你提到的函数式接口的典型应用场景。

更具函数式风格的优化

如果你想让代码更贴合函数式编程的“流式操作”思路,可以用Collectors.collectingAndThen来把收集和异常检查合并到一个流操作里:

import java.util.Arrays;
import java.util.stream.Collectors;

public class NegativeCheckFunctional {
    public static void main(String[] args) {
        int[] input = {0, -1, -2};
        
        Arrays.stream(input)
              .filter(i -> i < 0)
              .boxed()
              .collect(Collectors.collectingAndThen(
                  Collectors.toList(),
                  negativeList -> { // 这里用到了Function函数式接口
                      if (!negativeList.isEmpty()) {
                          throw new IllegalArgumentException("Invalid integers: " + negativeList);
                      }
                      return negativeList;
                  }
              ));
    }
}

collectingAndThen的作用是在完成收集操作后,对收集结果执行一个后续处理函数(这里的lambda实现了Function<List<Integer>, List<Integer>>),这样我们就能把“收集负数”和“检查并抛异常”的逻辑整合到同一段流操作中,让代码的连贯性更强。

效果说明

运行上面的代码,当输入是[0, -1, -2]时,会抛出异常:

java.lang.IllegalArgumentException: Invalid integers: [-1, -2]

完全符合你的预期需求。

内容的提问来源于stack exchange,提问作者LOUDKING

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:04:20