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

Java实现无循环获取嵌套Double列表的最小和子列表

解决方法:用Java Stream API实现无循环的最小和子列表查找

没问题,咱们可以借助Java 8及以上版本的Stream API,完全不用写显式循环就能搞定这个需求。核心思路是利用流的函数式操作,通过比较每个子列表的元素和,找出和最小的那个子列表。

完整代码示例

import java.util.List;
import java.util.Comparator;

public class MinSumListFinder {
    public static void main(String[] args) {
        // 初始化题目给定的嵌套列表
        List<List<Double>> nestedList = List.of(
            List.of(1.2),
            List.of(2.0),
            List.of(20.0),
            List.of(10.0),
            List.of(50.0),
            List.of(0.5, 50.0),
            List.of(0.5, 20.0),
            List.of(0.5, 10.0),
            List.of(0.5, 1.2),
            List.of(0.5, 0.5),
            List.of(0.5, 2.0)
        );

        // 无循环实现:通过Stream API定位和最小的子列表
        List<Double> minSumList = nestedList.stream()
            // 以子列表的元素和为比较依据,找出最小的子列表
            .min(Comparator.comparingDouble(sublist -> 
                sublist.stream().mapToDouble(Double::doubleValue).sum()
            ))
            // 处理空列表的边界情况(本题输入非空,可根据实际调整)
            .orElseThrow(() -> new IllegalArgumentException("嵌套列表不能为空"));

        System.out.println(minSumList); // 输出结果:[0.5, 0.5]
    }
}

代码说明

  • 无循环核心:全程使用Stream流操作替代显式的for/while循环,所有遍历和计算都由流框架隐式处理。
  • 子列表和计算:通过sublist.stream().mapToDouble(Double::doubleValue).sum()快速计算每个子列表的元素和,同样没有用到循环。
  • 比较逻辑:Comparator.comparingDouble()定义了比较规则——以子列表的和作为排序依据,min()方法直接返回和最小的子列表。
  • 健壮性处理:orElseThrow()用于处理嵌套列表为空的边界场景,避免空指针异常,你可以根据实际需求替换成orElse(null)或者其他默认值。

内容的提问来源于stack exchange,提问作者A. perera

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:24:24