Scala 中的集合和 toArray

2024-02-23

Java代码:

Collection<MethodInfo> items = getItems();
MethodInfo[] itemsArray = items.toArray(new MethodInfo[items.size()]);

我想知道 Scala 中的等效代码是什么?

val items: Seq[MethodInfo] = getItems
val itemsArray: Array[MethodInfo]  = ???

正如@SpiderPig 在他的评论中指出的,你可以简单地调用items.toArray将序列转换为数组。我想你可能对 Java 中必须提供目标数组这一事实感到困惑,但在 Scala 中你只需调用toArray没有争论。

必须在 Java 中提供数组的原因与类型擦除 http://docs.oracle.com/javase/tutorial/java/generics/erasure.html。 Java 编译器不知道在编译时要创建什么类型的数组,并且由于 Java 数组不是通用的,因此它们需要一个具体类型才能实例化。

Java 实现toArray使用一个技巧来绕过这个限制。通过传入所需类型的数组,JVM 可以使用反射thatarray 实例化数组以创建正确类型的新数组。 (实际上,您可以将 0 元素数组传递给toArray方法,它将分配一个正确大小的数组。这toArray方法实际上将这项工作委托给Arrays.copyOf http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/java/util/Arrays.java#2244,然后使用反射来创建副本。)

Scala 采用了不同的方法。 Scala 编译器比 Java 编译器在幕后做了更多的工作(默认参数、隐式转换、隐式参数等)。如果您查看以下内容,您就会知道有一些编译器魔法在起作用实施toArray https://github.com/scala/scala/blob/v2.10.2/src/library/scala/collection/TraversableOnce.scala#L246:

def toArray[B >: A : ClassTag]: Array[B] = {
  if (isTraversableAgain) {
    val result = new Array[B](size)
    copyToArray(result, 0)
    result
  }
  else toBuffer.toArray
}

The ClassTag泛型类型中要求编译器提供类信息。这允许 JVM 为最终结果实例化正确类型和大小的数组。这意味着您不必提供数组,因为 Scala 库可以为您创建正确的类型和大小之一。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Scala 中的集合和 toArray 的相关文章

  • java.lang.Class: 在 java 程序中初始化 log4j 属性文件时出错

    我正在尝试使用 log4j 运行独立的 java 程序 但在调试时收到以下消息 控制台上没有 log4j 相关日志 log Logger 1343 java lang Class ERROR in 18b4aac2 有人可以建议这里出了什么
  • 使用 Checkstyle Plugin 时从插件调用代码时出现问题:“org.eclipse.jface”

    我正在尝试在 Rational Software Architect 7 0 0 4 上使用 eclipse cs 插件 我最近卸载了旧的 beta2 版本并安装了 beta3 插件本身按照之前的配置工作 但是每当我尝试通过 Windows
  • Java 泛型/类型调度问题

    考虑以下程序 import java util List import java util ArrayList public class TypeTest public static class TypeTestA extends Type
  • 方法断点可能会大大减慢调试速度

    每当向方法声明行添加断点 在 Intellij IDEA 或 Android Studio 中 时 都会出现一个弹出窗口 方法断点可能会大大减慢调试速度 为什么会这样戏剧性地减慢调试速度 是我的问题吗 将断点放在函数的第一行有什么不同 Th
  • 在 Scala 中反转地图的优雅方法

    目前正在学习Scala 需要反转Map 来进行一些反转值 gt 键查找 我一直在寻找一种简单的方法来做到这一点 但只想到了 Map origMap map kvp gt kvp 2 gt kvp 1 有人有更优雅的方法吗 假设值是唯一的 则
  • Java 变量的作用域

    我不明白为什么这段代码的输出是10 package uno public class A int x 10 A int x 12 new B public static void main String args int x 11 new
  • spring - 强制 @Autowired 字段的 cglib 代理

    我有混合堆栈 EJB 和 Spring 为了将 Spring 自动装配到 EJB 我使用SpringBeanAutowiringInterceptor 不确定这是否会影响我遇到的问题 在尝试通过以下方式自动装配 bean 时 Scope p
  • cucumber-junit-platform-engine 中的功能文件发现

    In cucumber junit我使用的库 CucumberOptions定义功能文件位置 package com mycompany cucumber import cucumber api CucumberOptions import
  • 参数动态时如何构建 JPQL 查询?

    我想知道是否有一个好的解决方案来构建基于过滤器的 JPQL 查询 我的查询太 富有表现力 我无法使用 Criteria 就像是 query Select from Ent if parameter null query WHERE fiel
  • 为什么 ConcurrentHashMap::putIfAbsent 比 ConcurrentHashMap::computeIfAbsent 更快?

    使用 ConcurrentHashMap 我发现computeIfAbsent 比putIfAbsent 慢两倍 这是简单的测试 import java util ArrayList import java util List import
  • tomcat 过滤所有 web 应用程序

    问题 我想对所有网络应用程序进行过滤 我创建了一个过滤器来监视对 apache tomcat 服务器的请求 举例来说 它称为 MyFilter 我在 netbeans 中创建了它 它创建了 2 个独立的目录 webpages contain
  • 如何使用 Mockito 和 Junit 模拟 ZonedDateTime

    我需要模拟一个ZonedDateTime ofInstant 方法 我知道SO中有很多建议 但对于我的具体问题 到目前为止我还没有找到任何简单的解决办法 这是我的代码 public ZonedDateTime myMethodToTest
  • ExceptionHandler 不适用于 Throwable

    我们的应用程序是基于 Spring MVC 的 REST 应用程序 我正在尝试使用 ExceptionHandler 注释来处理所有错误和异常 I have ExceptionHandler Throwable class public R
  • 来自客户端的超时 Web 服务调用

    我正在使用 RestEasy 客户端调用网络服务 一项要求是 如果调用运行时间超过 5 秒 则中止 超时调用 我如何使用 RestEasy 客户端实现这一目标 我只看到服务器端超时 即如果在一定时间内未完成请求 Rest Easy 网络服务
  • 我想要一个 Java 阿拉伯语词干分析器

    我正在寻找阿拉伯语的 Java 词干分析器 我找到了一个名为 AraMorph 的库 但它的输出是无法控制的 并且它会形成不需要的单词 还有其他阿拉伯语词干分析器吗 这是新的阿拉伯语词干分析器 Assem 的阿拉伯语轻词干分析器 http
  • Spock模拟inputStream导致无限循环

    我有一个代码 gridFSFile inputStream bytes 当我尝试这样测试时 given def inputStream Mock InputStream def gridFSDBFile Mock GridFSDBFile
  • 从一个文本文件中获取数据并将其移动到新的文本文件

    我有一个文件 里面有数据 在我的主要方法中 我读入文件并关闭文件 我调用另一种方法 在原始文件的同一文件夹内创建一个新文件 所以现在我有两个文件 原始文件和通过我调用的方法生成的文件 我需要另一种方法 从原始文件中获取数据并将其写入创建的新
  • Java中有类似分支/跳转表的东西吗?

    Java有类似分支表或跳转表的东西吗 分支表或跳转表是 根据维基百科 http en wikipedia org wiki Branch table 用于描述使用分支指令表将程序控制 分支 转移到程序的另一部分 或可能已动态加载的不同程序
  • 使用 eclipse IDE 配置 angularjs

    我想开始使用 AngularJs 和 Java Spring 进行开发 我使用 Eclipse 作为 IDE 我想配置我的 Eclipse 以使这些框架无缝工作 我知道我可能要求太多 但相信我 我已经做了很多研究 你们是我最后的选择 任何帮
  • 与文件名中的冒号“:”作斗争

    我有以下代码 用于加载大量 csv gz 并将它们转储到其他文件夹中 并将源文件名作为一列 object DailyMerger extends App def allFiles path File List File val parts

随机推荐

  • 使用 FileSystemWatcher 观察 log4net 日志文件

    我创建了简单的 WPF 控件来监视日志文件中的更改 我使用 FileSystemWatcher 来监视特定文件 我的配置 Directory System IO Path GetDirectoryName logFileFullPath F
  • Swift -Ounchecked 和断言

    Preface 在斯威夫特中 ENABLE NS ASSERTIONS被忽略 断言是打开还是关闭取决于SWIFT OPTIMIZATION LEVEL 浏览此处获取更多信息 http blog krzyzanowskim com 2015
  • 两个多边形的最近点

    我有两个多边形 我想获得最小距离 并测量该距离之间的点 当然 这样的点很可能位于两个节点之间的边缘 这是一个例子 我正在寻找一种算法 可以给我绿色距离和两个点 如果多边形不相交 您可以这样做 如果有多边形 A 和多边形 B 则 A i 和
  • 在 wget 或curl 查询中使用通配符

    从目录下载时是否可以在 wget 查询中使用通配符 基本上 我有一个网站 www download example com dir version package rpm 然而 版本目录一直在变化 有时包含多个RPM包 是否有一个 wget
  • 如何在有可用空间(如密度扫描仪)的 pdf 上插入图像或图章

    我有一个 pdf 文件 我在其中的所有页面上添加了图章 但是 问题是 图章被添加到每个页面的左上角 如果页面的该部分有文本 则标记会出现在文本上 我的问题是 有什么方法可以阅读每一页 如果该部分没有文本 请添加图章 否则搜索最近的可用可用空
  • onCreateOptionsMenu(Menu 菜单) 和 onPrepareOptionsMenu(Menu 菜单) 有什么区别?

    解释一下之间的区别onCreateOptionsMenu Menu menu and onPrepareOptionsMenu Menu menu onCreateOptionsMenu 被调用一次 onPrepareOptionsMenu
  • 如何在同一个组件中初始化和使用上下文?

    我有一个名为 SortContext 的上下文 我想做的是初始化这个上下文 创建它的提供者 然后在同一个组件中使用该上下文 这可能吗 例如 export default function MyComponent children const
  • 连接两个 numpy 矩阵

    如果你有两个 numpy 矩阵 如何将它们连接在一起 它们应该水平连接 以便 0 1 0 1 1 0 1 0 4 1 4 1 0 1 0 1 例如 对于这些矩阵 gt gt type X gt gt type Y gt gt X shape
  • Swift 可以将类/结构数据转换为字典吗?

    例如 class Test var name String var age Int var height Double func convertToDict gt String AnyObject let test Test test na
  • React 使表格可点击并编辑详细信息

    如何使表格行可单击以编辑和更新详细信息 我正在从 pouchdb 检索这些详细信息 我将部分代码粘贴到下面以供您评估 this state docs this db this props db componentDidMount this
  • 计算图像中圆心的坐标

    假设我有这张图像 我想得到 X Y 中每个圆的中心 MatLab 有没有算法可以做到这一点 只需拨打一次电话即可实现区域属性 http www mathworks nl help images ref regionprops html im
  • Django:检查模板中ManyToMany字段的值

    我的 Django 应用程序中有以下模型 class Group models model name models CharField max length 30 users Models ManyToManyField User 在我的模
  • 是否可以阻止远程脚本在 iframe 内加载?

    我正在动态创建 iframe 并且我想阻止不是源自 iframe 来源的脚本 这可能吗 通过 JavaScript jQuery 例如 如果我的页面加载 iframeexample com内容 我想要example com要运行的脚本 但我
  • 关于函数声明中的函数指针

    include
  • 以不同(非 root)用户身份从 PHP 运行 shell 脚本

    我正在尝试在 Ubuntu 服务器上从 PHP 运行非特权用户拥有的 shell 脚本 权限问题使得运行它exec 不切实际 因为它是www data正在运行它 我用谷歌搜索了一下 发现对 suExec 的各种引用 对于这么小的问题来说 这
  • 测试 Selenium 的 onbeforeunload 事件

    我正在尝试为网页编写一个 Selenium 测试 该测试使用 onbeforeunload 事件在离开之前提示用户 Selenium 似乎无法识别出现的确认对话框 或者提供点击 确定 或 取消 的方法 有什么办法可以做到这一点吗 我正在使用
  • 最重要的常量和右值引用

    在 C 03 中 您可以使用const 将临时变量的生命周期延长到引用的生命周期的技巧 或 最重要的常量 我的问题是 在 C 0x 中 这种行为是否扩展到右值引用 IEauto x someFunction 根据 class tempora
  • 有没有办法强制 Google Speech api 仅返回单词作为响应?

    我正在使用谷歌这个API language code key 我的密钥 用于语音识别 并且效果非常好 问题在于数字 即如果我说one two three four结果将是1234如果我说one thousand two hundred th
  • ARKit:如何通过 hitTest 命中 SCNNode?

    我有几架飞机被 ARKit 检测到并对用户可见 我希望用户能够单击屏幕 以便仅保留他选择的平面 更改其颜色并删除其他平面 我的飞机被添加到 didAddNode 委托方法中 如下所示 Plane plane Plane alloc init
  • Scala 中的集合和 toArray

    Java代码 Collection