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
相关产品推荐
相关产品推荐

