当前位置: 首页 > 知识库问答 >
问题:

Java8流和类型转换

姚宪
2023-03-14

谁能给我解释一下为什么下面的代码不起作用?

我试图了解Java8的新特性,并解决了BerlinClock卡塔问题。在此期间,我必须以“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[])

int[] hhmmss= Arrays.stream(time.split(":")
                    .mapToInt(Integer::parseInt).toArray();

共有1个答案

宗政深
2023-03-14

对于第一种情况,stream#map()方法将为您提供一个stream ,然后stream#toarray()返回一个对象[],您需要将其强制转换为integer[]。但是在运行时,如果在内部创建对象[]而不是整数[],这种强制转换可能会失败,这里就是这种情况。此流的toarray()方法的源代码如下所示:

@Override
public final Object[] toArray() {
    return toArray(Object[]::new);
}

并且不能将对象[]强制转换为整数[]引用。

您可以通过使用流#ToArray(IntFunction)来解决这个问题,这样就不需要强制转换:

private Integer[] parseTime (String time){
    Integer[] hhmmss = Arrays.stream(time.split(":"))
                    .map(s->Integer.valueOf(s))
                    .toArray(Integer[]::new);
    return hhmmss;
}
 类似资料:
  • 主要内容:1 Java8 类型推断的介绍,2 Java8 类型推断的案例1,3 Java8 类型推断的案例21 Java8 类型推断的介绍 类型推断是Java的一项功能,它使编译器可以查看每个方法调用和相应的声明以确定参数的类型。 Java在Java 8中提供了类型推断的改进版本。 1.1 Java8以前 在下面的声明中,我们在一侧提到了arraylist的类型。这种方法是在Java 7中引入的。在这里,您可以将第二面留为<>,并且编译器将通过引用变量的类型来推断其类型。 1.2 Java8以后

  • 我想得到以下数据结构:Map 给定的是一个包含字段als原语(位置、目标、距离)或作为键(位置)加映射(目标)的类。从每个独特的位置,一个人可以瞄准多个目的地(按距离)。 关于第二个代码段:结果应该与第一个代码中的结果相同。唯一的区别是,LocationPair中提供的数据已被进一步处理,因此目的地和距离已被放入其目标地图中。 我知道这一定是可能的,但不知何故,我无法弄清楚如何完成它。上面的流代码

  • 我有一个复杂的要求,列表中记录有注释。我们有一个报告的功能,每个变化都应该被记录和报告。因此,根据我们的设计,即使单个字段已更新,我们也会创建一个全新的记录。 现在,我们希望将注释的历史记录(按时间戳反向排序)存储在数据库中。运行查询后,我得到了评论列表,但它包含重复的条目,因为其他一些字段被更改。它还包含空条目。 我编写了以下代码来删除重复和空条目。 这个逻辑工作正常,现在已经过测试了,但是我想

  • 要允许您传播关于已生成消息的内容类型的信息,默认情况下,Spring Cloud Stream附加contentType标头到出站消息。对于不直接支持头文件的中间件,Spring Cloud Stream提供了自己的自动将邮件包裹在自己的信封中的机制。对于支持头文件的中间件,Spring Cloud Stream应用程序可以从非Spring Cloud Stream应用程序接收具有给定内容类型的消

  • 在我的jOOQ配置文件中,我为日期字段定义了一个转换器,但是在forcedType的节中定义类型的条件时遇到了一些问题。 对于测试,我使用了表达式: 以及在类型上: 我希望匹配数据类型为DATE的所有列。取而代之的是,它不匹配任何一个列,除了一个类型为DATE的列之外,就像其他不匹配的列一样,但这个列的def:CURRENT DATE列似乎与此匹配。 为了让它工作,我必须使用: 有人能给我解释一下

  • 枚举对象 积极vs懒惰 流 10.1-枚举类型 Elixir提供了枚举类型(enumerables)的概念,使用Enum模块操作它们。我们已经介绍过两种枚举类型:列表和图。 iex> Enum.map([1, 2, 3], fn x -> x * 2 end) [2, 4, 6] iex> Enum.map(%{1 => 2, 3 => 4}, fn {k, v} -> k * v end) [2