如何比较数组的最小值?为何出现OptionalInt类型编译错误?
问题分析与解决
错误原因
Arrays.stream(ints).min()返回的是**OptionalInt类型**,而非直接的int数值。这是Java为了处理空数组(此时不存在最小值)场景设计的容器类,Java并没有为OptionalInt定义>这类比较运算符,直接用>比较两个OptionalInt对象自然会触发编译错误。
修正方案
核心思路
先获取两个数组的最小值容器实例,再从中提取实际的int数值进行比较;同时要考虑数组为空的异常场景。
基础修正代码(假设数组非空)
import java.util.Arrays; import java.util.OptionalInt; public class Main { public static void main(String[] args) { int[] ints = {12, 6, 8, 242}; int[] ints1 = {5, 1, 5432, 5, 76, 146, 8}; // 预先获取两个数组的最小值容器,避免重复创建流提升效率 OptionalInt minOfInts = Arrays.stream(ints).min(); OptionalInt minOfInts1 = Arrays.stream(ints1).min(); // 提取int值后进行比较 if (minOfInts.getAsInt() > minOfInts1.getAsInt()) { System.out.println(minOfInts1.getAsInt()); } } }
安全写法(处理空数组场景)
如果数组有可能为空,必须先判断容器内是否存在有效值,避免抛出NoSuchElementException:
import java.util.Arrays; import java.util.OptionalInt; public class Main { public static void main(String[] args) { int[] ints = {}; // 空数组示例 int[] ints1 = {5, 1, 5432, 5, 76, 146, 8}; OptionalInt minOfInts = Arrays.stream(ints).min(); OptionalInt minOfInts1 = Arrays.stream(ints1).min(); // 先确认两个数组都能找到有效值 if (minOfInts.isPresent() && minOfInts1.isPresent()) { if (minOfInts.getAsInt() > minOfInts1.getAsInt()) { System.out.println(minOfInts1.getAsInt()); } } else { // 空数组的兜底处理 System.out.println("存在空数组,无法完成最小值比较"); } } }
内容的提问来源于stack exchange,提问作者Dennis
相关产品推荐
相关产品推荐

