如何用Java Streams获取参数组合对应的最大ResultObject
Java Streams 实现参数组合最优结果查询
最优实现代码
public ResultObject getBestObjectWithParameters() { int maxParameterValue = 10; return IntStream.range(0, maxParameterValue) .parallel() .flatMap(a -> IntStream.range(0, maxParameterValue) .flatMap(b -> IntStream.range(0, maxParameterValue) .mapToObj(c -> runCalculation(a, b, c)))) .max(Comparator.comparingDouble(ResultObject::getValue)) .orElse(null); }
关键说明
- 参数组合生成:通过三层
IntStream的flatMap和mapToObj转换,替代原有的嵌套循环,生成所有(a,b,c)参数组合对应的ResultObject实例。 - 并行优化:在外层流调用
parallel(),让JDK自动利用多线程并行处理不同参数组合的计算任务,适合runCalculation是耗时操作的场景。注意必须保证runCalculation方法是线程安全的,不存在共享资源竞争问题。 - 最大值筛选:直接使用流的
max()方法,配合Comparator.comparingDouble(ResultObject::getValue)指定排序规则,快速筛选出getValue()值最大的对象。orElse(null)用于处理maxParameterValue=0这类无结果的边界情况。
额外注意
如果runCalculation本身执行速度极快,并行带来的线程调度开销可能抵消甚至超过性能收益,这种情况下可以去掉parallel()使用串行流。
内容的提问来源于stack exchange,提问作者imichaeldotorg
相关产品推荐
相关产品推荐

