Scala与Java集合互转摘要
欢迎支持笔者新作:《深入理解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支持的互转类型(内容来源于源码注释)。
- 以下可以通过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
- 以下可以通过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)
- 以下可以通过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
- 以下可以通过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集合互转摘要相关推荐
- Scala数组和Java集合互转代码演示
- Scala混用Java的集合类调用scala的foreach遍历问题
问题描述 [ERROR] /Users/jack/book/lightsword/src/main/scala/com/springboot/in/action/service/LightSwordU ...
- 【Scala】Scala中常见集合的使用---代码详解
1.List集合的使用及创建 object ListDemo1 {def main(args: Array[String]): Unit = {//创建一个Listval list: List[Int ...
- java list 转 scala_Java与Scala集合互转
使用 scala.collection.JavaConverters 与Java集合交互.它有一系列的隐式转换,添加了asJava和asScala的转换方法. import scala.collect ...
- scala to java_Scala 2.13 以后Java集合与Scala集合互相转换
原来需要Java集合和Scala集合类型互换时引入import scala.collection.JavaConverters._1 即可,但在Scala 2.13版本中JavaConverter已经 ...
- JAVA集合和字符串互转
JAVA集合和字符串互转 1.导入StringUtils的依赖包 2.字符串转集合 3.集合转字符串 1.导入StringUtils的依赖包 <dependency><groupId ...
- scala集合和java集合的转换-List
scala集合和java集合的转换-List scala的List要想转换成java的list 需要导入对应的类scala.collection.JavaConverters._ import jav ...
- Java 集合(List、Set)与数组(Arr)互转方法及注意事项,难怪《阿里开发手册》会如此重视
原创博文,欢迎转载,转载时请务必附上博文链接,感谢您的尊重. 前言: 如果你现在正急于解决问题,请立刻.马上拉到本篇最后的[总结],进入"不废话环节". 通过本篇的学习,你将全面掌 ...
- Java集合包含面试题
Java集合 Java 所有的集合类都位于 java.util 包下 集合类和数组不一样,数组元素既可以是基本类型的值,也可以是对象(实际上保存的是对象的引用变量),而集合里只能保存对象(实际上只是保 ...
最新文章
- c语言将ascii码存入eeprom,微机原理复习题答案+_Fixed
- 机器学习开发者的现代化路径:不需要从统计学微积分开始
- svn update 报错,必须先cleanup,然后cleanup失败解决方法
- Anaconda中快速安装Tensorflow与Keras并在pycharm中完成相应配置(win10cpu版)
- materialize_使用Materialize快速介绍材料设计
- Python学习入门基础:一篇文章搞定函数基础、函数进阶
- 有向图生成树个数(bzoj 4894: 天赋)
- Hex Editor Neo(十六进制编辑器)官方正式版V6.54.1.6478 | 二进制编辑器hex下载 | 非hexeditor汉化版
- 金山词霸2009牛津版完整破解版+绿色精简版下载
- 计算机网络系列选择题
- WORD中设置“选择性粘贴“—“无格式文本”的快捷键
- SPJ数据库-初识sql语句(05)(注释版)
- 电脑PE系统无法进入,完整详细解决方案
- 天气数据API接口记录
- excel的主要功能_如何用excel制作表格?
- 【docker lnmp】 2、容器mysql 连接问题 getaddrinfo failed
- 小米已成国产手机标杆,海外出货量碾压华为OV
- 神经网络的基本原理,神经网络算法三大类
- 【Matlab笔记】测绘工程专业正算、反算、度分秒转弧度函数
- C#自恋数字黑洞—水仙花数、玫瑰花数、五角星数
热门文章
- 【Homework】银行存取款业务
- 不同服务器怎么响应ajax,如何从服务器获得响应而无需刷新和使用JQuery/AJAX?
- cuDNN error: CUDNN_STATUS_EXECUTION_FAILED
- Material Design 组件之 CollapsingToolbarLayout
- AntDB上使用表空间
- Linux打tar包排除目录中的某个目录
- 苦酒入喉心作痛,红酒入鹅鹅想哭——震惊!勒索病毒想哭靠wine感染了Ubuntu16.04...
- HTML+CSS的学习
- json_decode
- CodeForces - 336D Vasily the Bear and Beautiful Strings(dp+组合数学)