当前位置: 首页 > 面试题库 >

Java流toArray()转换为特定类型的数组

闾丘照
2023-03-14
问题内容

也许这很简单,但实际上我对Java 8功能不熟悉,不知道如何实现。我有一条包含以下文本的简单行:

“密钥,名称”

并且我想将该行转换为String数组,并用逗号(,)分隔每个值,但是,我还想在返回最后一个数组之前修剪每个字段,所以我做了以下工作:

Arrays.stream(line.split(",")).map(String::trim).toArray();

但是,这将返回Object []数组而不是String
[]数组。经过进一步检查,我可以确认内容实际上是String实例,但是数组本身是Object元素。让我说明一下,这就是调试器对返回的对象的说明:

Object[]:
    0 = (String) "Key"
    1 = (String) "Name"

据我所知,问题出在映射调用的返回类型上,但是如何使它返回String []数组呢?


问题答案:

使用toArray(size -> new String[size])toArray(String[]::new)

String[] strings = Arrays.stream(line.split(",")).map(String::trim).toArray(String[]::new);

这实际上是一个lambda表达式

.toArray(new IntFuncthtml" target="_blank">ion<String[]>() {
        @Override
        public String[] apply(int size) {
            return new String[size];
        }
    });

告诉您将数组转换为相同大小的String数组。

来自文档

生成器函数采用整数(即所需数组的大小),并生成所需大小的数组。这可以用数组构造函数参考简明表达:

 Person[] men = people.stream()
                      .filter(p -> p.getGender() == MALE)
                      .toArray(Person[]::new);

类型参数:

A-结果数组的元素类型

参数:

generator-产生所需类型和所提供长度的新数组的函数



 类似资料:
  • 也许这很简单,但实际上我对Java8特性一无所知,不知道如何实现这一点。我有一个简单的行,包含以下文本: “密钥,名称”

  • 我很难理解为什么一维数组到基元数组的转换失败,而二维情况下却有效。 我试着翻阅文件,但没有用。我可以看到的一件事是,在第一种情况下,由于我们试图将转换为,所以可能导致错误,而第二种情况可以正常工作,因为将是一个对象类型。 用一个示例来解释的工作原理,特别是对基元的工作原理,将非常有帮助。

  • 我正在尝试有一个通量通用转换器使用通用类型在Java 8。我把我的代码建立在这个答案的基础上。其思想基本上是实现这个特定的转换器->: 类型转换器->转换为我想要的任何类型。因此,我正在使用构造函数创建一个类型为的类,并返回一个方法。我想在调用上创建类似这样的多个条目:,但类类型不同。但它甚至对整数也不起作用。 当我使用此单元测试进行测试时,我得到错误:。

  • 我看了几十个答案,但他们做的大多数是建议或类似的技巧。在我的例子中,我要转换的类型是。下面是这个POJO: 由于重构,现在是一个数组。 (显然这是一种简化,对象多了很多字段)。我只想获得一个数组,以便将其传递给。以下是我想要的: 但是根据IDE返回。生成器不工作,但无论如何这不是一个好主意,我们不想重新分配或扰乱那些未来。只需返回它们的数组。传递不会编译。 不要把这个问题标记为重复问题,除非你绝对

  • 问题内容: 我正在将iOS项目迁移到Swift。我正在上课。当我从Swift调用Objective C方法时,很多Objective C类型都转换为它们的Swift对应类型。 在我的情况下,目标C 转换为Swift的。现在是我的问题了。在我的Swift类中,我从Objective C对象获得了这样的数组。现在我处于Swift世界中,我想将此数组强制转换为特定类型,而不是,因为我确定知道此数组中存在

  • 问题内容: 我正在使用返回“对象”类型的普通对象的Web服务。调试清楚地表明此对象中存在某种Array,因此我想知道如何将“ Object”转换为Array(或类似对象)? 我尝试了以下方法: 但是没有任何效果。我总是得到一个InvocationTargetException。 我究竟做错了什么? 编辑 : 可悲的是,我不得不删除指向显示Eclipse调试器输出的图像的链接,因为它不再可用。请不要