如何通过Java 8 Stream将List<Object[]>转换为List<Integer>
List<Object[]>转List的ClassCastException原因及解决方法
异常原因
你遇到的ClassCastException是因为在Stream操作中错误地将Object[]类型的元素直接强转为Integer了。你的原始集合是List<Object[]>,每个元素都是对象数组,而非单个Integer。如果代码里写了类似map(item -> (Integer) item)的逻辑,JVM会尝试把Object[]实例转成Integer——这两种类型完全不兼容,自然抛出类型转换异常。
正确实现
假设你的每个Object[]数组中存储的第一个元素就是目标Integer(这是这类场景的常见情况),正确的做法是先从数组中取出对应位置的元素,再强转为Integer:
import java.util.List; import java.util.stream.Collectors; // 示例代码 List<Object[]> resultSet = ...; // 你的原始结果集 List<Integer> integerList = resultSet.stream() // 取出数组第一个元素并强转为Integer,可根据实际情况调整数组索引 .map(objectArray -> (Integer) objectArray[0]) .collect(Collectors.toList());
如果需要更健壮的处理(比如数组可能为null、数组为空、元素类型不是Integer),可以添加过滤逻辑避免异常:
List<Integer> integerList = resultSet.stream() // 过滤掉null数组、空数组,以及第一个元素不是Integer的情况 .filter(arr -> arr != null && arr.length > 0 && arr[0] instanceof Integer) .map(arr -> (Integer) arr[0]) .collect(Collectors.toList());
内容的提问来源于stack exchange,提问作者Prabhash Mishra
相关产品推荐
相关产品推荐

