【发布时间】:2023-03-18 17:44:02
【问题描述】:
谁能向我解释为什么下面的代码不起作用?
我试图了解 Java8 的新特性并解决了 BerlinClock Kata。在此期间,我必须解析 "hh:mm:ss" 格式的字符串 - 我想使用流并编写了以下代码。
import java.util.Arrays;
private Integer[] parseTime (String time){
Integer[] hhmmss = (Integer[]) Arrays.stream(time.split(":"))
.map(s->Integer.parseInt(s)).toArray();
return hhmmss;
}
但运行时系统(我认为)抱怨无法完成显式类型转换 (Integer[])。
据我了解,Arrays.stream(time.split(":")) 部分返回Stream<String>,然后map(s->Integer.parseInt(s)) 将其转换为Stream<Integer>,然后toArray() 产生Object[]。现在应该可以将类型转换为Integer[],因为中间流有一个Integer 类型参数。
请注意,我知道如何在不使用类型转换的情况下解决此问题
int[] hhmmss= Arrays.stream(time.split(":")
.mapToInt(Integer::parseInt).toArray();
并将类型签名相应地更改为int[] parseTime。
但我不明白为什么类型转换有问题。
【问题讨论】:
标签: java casting java-8 java-stream