欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。

欢迎跳转到本文的原文链接:https://honeypps.com/java/scala-and-java-collection-exchanges/


在上一篇文章《再看Kafka Lag》中笔者提及了Scala与Java集合互转的内容,但是并未有详述,本文对此做一个补充说明,方便在使用的时候可以随时翻阅。

对于集合而言,Scala从2.8.1开始引入scala.collection.JavaConverters用于Scala与Java集合的互转。在scala代码中如果需要集合转换,首先引入scala.collection.JavaConverters._,进而显示调用asJava或者asScala方法完成转型。与此雷同的scala.collection.JavaConversions已被标注为@Deprecated(since 2.12.0),JavaConversions可以做到隐式转换,即不需要asJava或者asScala的调用,但是这样可能会对阅读造成障碍,可能会让人难以知晓什么变成了什么。笔者这里罗列出JavaConverters支持的互转类型(内容来源于源码注释)。

  1. 以下可以通过asScala和asJava进行互转:
*    scala.collection.Iterable       <=> java.lang.Iterable
*    scala.collection.Iterator       <=> java.util.Iterator
*    scala.collection.mutable.Buffer <=> java.util.List
*    scala.collection.mutable.Set    <=> java.util.Set
*    scala.collection.mutable.Map    <=> java.util.Map
*    scala.collection.concurrent.Map <=> java.util.concurrent.ConcurrentMap
  1. 以下可以通过asScala将Java的转成Scala的,通过特殊的命名(如asJavaCollection)将Scala的转成Java的:
*    scala.collection.Iterable    <=> java.util.Collection   (via asJavaCollection)
*    scala.collection.Iterator    <=> java.util.Enumeration  (via asJavaEnumeration)
*    scala.collection.mutable.Map <=> java.util.Dictionary   (via asJavaDictionary)
  1. 以下可以通过asJava进行Scala到Java的单向转换:
*    scala.collection.Seq         => java.util.List
*    scala.collection.mutable.Seq => java.util.List
*    scala.collection.Set         => java.util.Set
*    scala.collection.Map         => java.util.Map
  1. 以下可以通过asScala进行Java到Scala的单向转换:
*    java.util.Properties => scala.collection.mutable.Map

在所有情形下,从原始类型转变到对侧类型之后再转变回来的话会是同一个对象,举例

import scala.collection.JavaConverters._val source = new scala.collection.mutable.ListBuffer[Int]
val target: java.util.List[Int] = source.asJava
val other: scala.collection.mutable.Buffer[Int] = target.asScala
assert(source eq other)

另外,转换方法也有其描述性的名称可供显示调用,举例如下:

scala> val vs = java.util.Arrays.asList("hi", "bye")
vs: java.util.List[String] = [hi, bye]scala> val ss = asScalaIterator(vs.iterator)
ss: Iterator[String] = non-empty iteratorscala> .toList
res0: List[String] = List(hi, bye)scala> val ss = asScalaBuffer(vs)
ss: scala.collection.mutable.Buffer[String] = Buffer(hi, bye)

欢迎跳转到本文的原文链接:https://honeypps.com/java/scala-and-java-collection-exchanges/


欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。


Scala与Java集合互转摘要相关推荐

  1. Scala数组和Java集合互转代码演示

  2. Scala混用Java的集合类调用scala的foreach遍历问题

    问题描述 [ERROR] /Users/jack/book/lightsword/src/main/scala/com/springboot/in/action/service/LightSwordU ...

  3. 【Scala】Scala中常见集合的使用---代码详解

    1.List集合的使用及创建 object ListDemo1 {def main(args: Array[String]): Unit = {//创建一个Listval list: List[Int ...

  4. java list 转 scala_Java与Scala集合互转

    使用 scala.collection.JavaConverters 与Java集合交互.它有一系列的隐式转换,添加了asJava和asScala的转换方法. import scala.collect ...

  5. scala to java_Scala 2.13 以后Java集合与Scala集合互相转换

    原来需要Java集合和Scala集合类型互换时引入import scala.collection.JavaConverters._1 即可,但在Scala 2.13版本中JavaConverter已经 ...

  6. JAVA集合和字符串互转

    JAVA集合和字符串互转 1.导入StringUtils的依赖包 2.字符串转集合 3.集合转字符串 1.导入StringUtils的依赖包 <dependency><groupId ...

  7. scala集合和java集合的转换-List

    scala集合和java集合的转换-List scala的List要想转换成java的list 需要导入对应的类scala.collection.JavaConverters._ import jav ...

  8. Java 集合(List、Set)与数组(Arr)互转方法及注意事项,难怪《阿里开发手册》会如此重视

    原创博文,欢迎转载,转载时请务必附上博文链接,感谢您的尊重. 前言: 如果你现在正急于解决问题,请立刻.马上拉到本篇最后的[总结],进入"不废话环节". 通过本篇的学习,你将全面掌 ...

  9. Java集合包含面试题

    Java集合 Java 所有的集合类都位于 java.util 包下 集合类和数组不一样,数组元素既可以是基本类型的值,也可以是对象(实际上保存的是对象的引用变量),而集合里只能保存对象(实际上只是保 ...

最新文章

  1. c语言将ascii码存入eeprom,微机原理复习题答案+_Fixed
  2. 机器学习开发者的现代化路径:不需要从统计学微积分开始
  3. svn update 报错,必须先cleanup,然后cleanup失败解决方法
  4. Anaconda中快速安装Tensorflow与Keras并在pycharm中完成相应配置(win10cpu版)
  5. materialize_使用Materialize快速介绍材料设计
  6. Python学习入门基础:一篇文章搞定函数基础、函数进阶
  7. 有向图生成树个数(bzoj 4894: 天赋)
  8. Hex Editor Neo(十六进制编辑器)官方正式版V6.54.1.6478 | 二进制编辑器hex下载 | 非hexeditor汉化版
  9. 金山词霸2009牛津版完整破解版+绿色精简版下载
  10. 计算机网络系列选择题
  11. WORD中设置“选择性粘贴“—“无格式文本”的快捷键
  12. SPJ数据库-初识sql语句(05)(注释版)
  13. 电脑PE系统无法进入,完整详细解决方案
  14. 天气数据API接口记录
  15. excel的主要功能_如何用excel制作表格?
  16. 【docker lnmp】 2、容器mysql 连接问题 getaddrinfo failed
  17. 小米已成国产手机标杆,海外出货量碾压华为OV
  18. 神经网络的基本原理,神经网络算法三大类
  19. 【Matlab笔记】测绘工程专业正算、反算、度分秒转弧度函数
  20. C#自恋数字黑洞—水仙花数、玫瑰花数、五角星数

热门文章

  1. 【Homework】银行存取款业务
  2. 不同服务器怎么响应ajax,如何从服务器获得响应而无需刷新和使用JQuery/AJAX?
  3. cuDNN error: CUDNN_STATUS_EXECUTION_FAILED
  4. Material Design 组件之 CollapsingToolbarLayout
  5. AntDB上使用表空间
  6. Linux打tar包排除目录中的某个目录
  7. 苦酒入喉心作痛,红酒入鹅鹅想哭——震惊!勒索病毒想哭靠wine感染了Ubuntu16.04...
  8. HTML+CSS的学习
  9. json_decode
  10. CodeForces - 336D Vasily the Bear and Beautiful Strings(dp+组合数学)