scala集合泛型数据类型转换成java集合遇到的问题

Obsidian笔记同步实战:基于Git的私有化部署与自动化管理 本文详细介绍了如何利用Git为Obsidian笔记构建私有化、自动化且免费的同步方案。通过安装配置Git与Obsidian-git插件,结合Gitee等远程仓库,实现笔记的版本管理、多设备同步与自动备份,打造安全可靠的知识管理体系。 阅读详情

简介

今天在线上遇到一个很棘手的scala的Map集合转换为java的Map集合中类型转换异常的问题,百度上并没有找到相关解决方案。这儿特地记录一下这个问题。在叙述这个问题之前觉得有必要在记录一下常用的scala和java转换的知识。熟悉scala开发的人对scala.collection.JavaConversions._和scala.collection.JavaConverters._肯定不陌生,这两个工具包封装了隐式java和scala集合相互转换的API。

scala与java集合相互转换

使用JavaConversions与JavaConverters都可以进行转换,需要注意的是:下面演示的无论是java还是scala相关的集合对象,其泛型参数类型都是scala的基本数据类型,这一点非常重要!

  • JavaConverters完成List集合转换
import scala.collection.JavaConverters._
// 创建泛型为Int类型的scala List集合
val scalaList:List[Int]= List(1,2,3,4,5)
// 将scala List集合转java List集合
val javaList:java.util.List[Int] = scalaList.asJava

// 创建java List集合
val List = new util.ArrayList[Int]()
// 将java List集合转为scala List集合
val scalalist2 = list.asScala
  • JavaConverters完成Map集合转换
import scala.collection.JavaConverters._
// 创建scala的map集合
val map: Map[String, Int] = Map("8" -> 15, "4" -> 3000)
// 将scala的map集合转为java map集合
val javaMap = map.asJava

// 创建java的Map集合
val javaMap1 = new util.HashMap[String,Int]()
// 将java的Map集合转为scala的Map
val scalaMap = javaMap1.asScala

这里特地说一下:JavaConversions转换都是隐式的。

  • JavaConversions 完成List集合转换
import scala.collection.JavaConversions._
// 创建泛型为Int类型的scala List集合
val scalaList: List[Int] = List(1, 2, 3, 4, 5)
// 将scala List集合转java List集合
val javaList =seqAsJavaList(scalaList)

// 创建java List集合
val list = new util.ArrayList[Int]()
// 将java List集合转为scala List集合
val scalalist2 = list.toList

  • JavaConversions 完成Map集合转换
import scala.collection.JavaConversions._
// 创建java的Map集合
val javaMap = new util.HashMap[String,Int]()
// 将java的Map集合转为scala的Map
val scalaMap = javaMap.toMap

// 创建scala的map集合
val map: Map[String, Int] = Map("8" -> 15, "4" -> 3000)
// 将scala的map集合转换成java的map集合
val javaMap = mapAsJavaMap(map)

以上两个包下还提供了其他scala和java数据类型转换如set集合等,具体可以参考官方文档,这里就不在介绍了。

错误定位

上面介绍java和scala集合转换的示例,这次错误主要是scala的集合泛型中Long数据类型转换java的集合中直接转换成java的Integer,而不是我们想要的java的Long类型。

项目中参数的返回值如下图所示:
在这里插入图片描述
可以很清晰看到返回的参数是Map[String, Long],而这个返回值作为了项目中的一个方法的入参参数如下图所示:
在这里插入图片描述
这里的Map对象是java.util.Map那个对象,所以这儿自然就想到将scala的Map[String, Long]转换java对应的数据集合类型就好。但是编译报了类型不匹配的的错误:
在这里插入图片描述
现在才发现上面转换后的java的Map集合泛型类型是scala的数据类型,并不是原生的java数据类型。所以这儿将上面的集合做一次类型转换,就像下面这样:

mapAsJavaMap(prize).asInstanceOf[java.util.Map[java.lang.String,java.lang.Long]]

这么写好了大功告成,but当测试的时候,发现执行报了以下的错误:
在这里插入图片描述
这里报了类型转换的异常,从Map[String, Long] 到java.util.Map[java.lang.String,java.lang.Long]转换过程应该是这样的过程:scala的Long类型转换成了java的Integer类型,然后在将这个Integer类型转成java的Long类型。

解决

查阅百度相关博客,大多数都是scala和java集合转换的相关博客,并没有集合转换异常的收录。最后抱着试一试的态度将最开始的findMap4Prize这个方法的返回值修改为:Map[String, java.lang.Long]发现问题竟然解决了。原生的scala的Long类型竟然不可以直接转换成java的Long类型数据,猜测应该是scala语言的一个bug(本人使用scala的版本号是2.11.8)。

若类似scala集合转化java集合出现的cast exception都可以直接将scala集合的泛型类型设置为java的数据类型即可。

基于改进Unet的多场景水果图像分割与分类研究 本文针对复杂场景下的水果图像分割问题,提出了一种改进Unet模型。通过构建包含8类水果、3种成熟度及多种干扰场景的数据集,采用ResNet50与MobileNetV3作为骨干网络,并在跳跃连接层集成CBAM注意力机制。实验表明,改进模型在测试集上达到91.6%的mIoU,推理速度提升23%,特别在重叠水果和低光照场景表现突出。研究为农业视觉检测提供了有效解决方案。 阅读详情

相关推荐

Vitis HLS 学习指南与实践教程

Vitis HLS 学习指南与实践教程摘要:本文系统介绍了AMD Vitis HLS工具及其应用。HLS技术将C/C++代码自动转换为硬件描述语言,显著提升FPGA开发效率(5-10倍)。文章对比了HLS与传统RTL设计的优势,包括抽象级别高、开发周期短、代码重用性强等特点。详细讲解了Vitis HLS工具链的核心功能,包括支持的C/C++特性(如任意精度数据类型)、开发流程(项目创建-代码编写-仿真-综合)以及关键优化技术(流水线、循环展开、数组分割等编译指示)。通过具体代码示例展示了HLS设计方法,为F

weixin_44707118的博客 1401

Spark报错:scala.collection.mutable.WrappedArray$ofRef cannot be cast to scala.collection.immutable.Lis

一、问题描述 Spark Dataframe转换到的rdd,取出Array类型字段的数据的时候,采用 spark.sql(servicesql).rdd.map(r => { val property = r.getAs[List[String]]("property") }) 会报错。 Caused by: java.lang.ClassCastException: scala.collection.mutable.WrappedArray$ofRef cannot be cast to

小蚯蚓的博客 2230

Linux USB设备命名规则

有一个USB设备,接到了Linux系统的终端的某个插口上,那么怎么找到这个设备对应设备路径呢?这个USB设备虚拟了多个功能(三个串口和一个网卡), 如何找到对应操作路径呢?

weixin_43132521的博客 1698

【Java原理系列】 scala JavaConverters原理用法示例源码详解

`JavaConverters`对象提供了一组装饰器类和方法,用于在Scala集合和Java集合之间进行转换。

wang2leee的博客 624

Atlas 300I Duo - vllm部署Qwen3-VL-8B-Instruct

本文介绍了在Ascend NPU环境下部署Qwen3-VL-8B大语言模型的步骤。主要包括:1)安装驱动、docker和vllm镜像;2)创建特权容器并挂载设备与目录;3)进入容器安装指定版本的transformers;4)设置环境变量和NPU卡配置;5)启动vllm服务;6)测试API接口。部署过程涉及多块NPU卡的使用,需注意内存碎片化问题,最终通过vllm框架提供模型推理服务。

m0_50105717的博客 1561

超声相控阵合成孔径成像FPGA设计介绍

1.仿真预览 2.理论分析 系统的基本结构如下所示: 以上是实际中完整的结构,系统中会涉及到两块板子中的时钟,这个就是设计一个时钟采样同步的问题,即所谓的时钟同步。一般这种情况,往往使用内插的方式来解决。这是由于,在实际中,超生波接收到的信号是由本身系统发送出去反射回来得到的,因此从另外一方面将,其是同步的。但是在接收的时候通过内插的方法解决其中的延迟问题。 根据论文中的介绍,整个系统分为如下几个部分: ·模拟发送信号,这个部分由MATLAB产生测试数据并量...

FPGA/MATLAB学习教程/源码/项目合作开发 2069

Scala容器与Java容器的互相转换

从scala 2.12版本开始,Scala官方废除了“scala.collection.JavaConversions”,改用“scala.collection.JavaConverters”。如果继续强行使用,则会提示如下错误: java.lang.NoSuchMethodError: scala.collection.JavaConversions$.deprecated$u002 0prop...

甘焕的博客 2255

C#串口通信从入门到精通(27)——高速通信下解决数据处理慢的问题(20ms以内)

本文介绍如何在高速通信情况下解决串口接收的数据来不及处理的问题,由高级工程师多年经验总结而成,绝对是串口领域的实战经验!

qq_34059233的博客 6809

scala学习笔记 - scala与java集合的互操作

JavaConversions对象提供了用于在Scala和Java集合之间来回转换的一组方法。 给目标值显式地指定一个类型来触发转换 例如: import scala col lec ti JavaConversions._ val props: scala.collection.mutable.Map[String, String] = System .getProperties() 如果你担心那些不需要的隐式转换也被引人的话,只引入需要的即可 例如: import scala.collection.J

LW_ICE 742

基于sklearn实现LDA主题模型(附实战案例)

目录LDA主题模型1.LDA主题模型原理2.LDA主题模型推演过程3.sklearn实现LDA主题模型(实战)3.1数据集介绍3.2导入数据3.3分词处理 3.4文本向量化3.5构建LDA模型3.6LDA模型可视化 3.7困惑度 其实说到LDA能想到的有两个含义,一种是线性判别分析(Linear Discriminant Analysis),一种说的是概率主题模型:隐含狄利克雷分布(Latent Dirichlet Allocation,简称LDA)。 现在讨论的是主题模型

m0_64336780的博客 2万+

多准则决策方法体系(AHP、熵权法、随机森林、加权线性法、TOPSIS、模糊综合评价)

多准则决策方法体系的基础,是由三大赋权方法和三大评价框架构成的 “3+3” 核心模块。赋权方法聚焦于准则重要性的量化,评价框架则专注于多准则信息的综合集成,二者共同覆盖了从 “确定权重” 到 “输出结果” 的全流程决策需求。

```On Earth, Be Water, By Coding``` 522

scala java 隐式转换_使用JavaConversions在Java和Scala集合之间进行隐式转换

小编典典他们说尝试使用JavaConverters,因为不推荐使用JavaConversions。scala> import collection.JavaConverters._import collection.JavaConverters._scala> def mergeMaps[A, B](ms: Set[Map[A, B]])(f: (B, B) => B): Map...

weixin_30562757的博客 1002

Codex 接入自定义大模型终极教程:插件解锁、会话管理、国产模型一键搞定

🚀 Codex 默认只能使用 OpenAI 官方模型?这篇文章带你从零接入 DeepSeek、通义千问、GLM 等国产大模型,并彻底解锁插件、会话删除、多模型切换等隐藏功能。配置原理、常见坑点、傻瓜式增强工具分享,小白也能轻松上手!🔥

XiaoqiangClub的博客 3147

【图文详细 】Scala——泛型

3、Scala 泛型    3.1、Scala 泛型基础  泛型用于指定方法或类可以接受任意类型参数,参数在实际使用时才被确定,泛型可以有效 地增强程序的适用性,使用泛型可以使得类或方法具有更强的通用性。泛型的典型应用场景 是集合及集合中的方法参数,可以说同 Java 一样,Scala 中泛型无处不在,具体可查看 Scala 的 API   泛型类:指定类可以接受任意类型参数。 泛型方法:...

谦卑t 5101

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

scala详细笔记(十三)scala之泛型详解

泛型用于指定方法或类可以接受任意类型参数,参数在实际使用时才被确定,泛型可以有效 地增强程序的适用性,使用泛型可以使得类或方法具有更强的通用性。泛型的典型应用场景 是集合及集合中的方法参数,可以说同 Java 一样,Scala 中泛型无处不在,具体可查看 Scala 的 API ! 1 泛型类和泛型方法的定义 泛型类:指定类可以接受任意类型参数。 泛型方法:指定方法可以接受任意类型参数。 ** * @Auther: 多易教育-行哥 * @Date: 2020/6/29 * @Descrip.

HANG.NIAN 5620

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

4. scala高阶之隐式转换与泛型

上一节,我介绍了scala中的面向对象相关概念,还有一个特色功能:模式匹配。本文,我会介绍另外一个特别强大的功能隐式转换,并在最后介绍scala中泛型的使用

wlyang666的博客 1544

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java与Scala集合互转,Java中调用Scala集合,Scala中转换Java集合

ScalaJava包括三种场景的转化。

qq_24428851的博客 1116

scala java 转换_Java与Scala集合互转,Java中调用Scala集合,Scala中转换Java集合

摘要:Scala,Java,JavaConverters包括三种场景的转化Java脚本中,将Scala集合转化为Java集合Scala脚本中,将Scala集合转化为Java集合Scala脚本中,将Java集合转化为Scala集合JavaConverters隐式转换Scala提供了大量的方法来隐式转换所有主要的Java和Scala容器类型。其中提供了如下的双向类型转换Iterator ...

weixin_39595931的博客 1310

scala详细笔记(五)scala集合详解

1 简介 scala中的集合分为两种 ,可变集合和不可变集合, 不可变集合可以安全的并发的访问! 集合的类主要在一下两个包中 1) 可变集合包scala.collection.mutable 2) 不可变集合包scala.collection.immutable scala默认使用的是不可变的集合 , 因此使用可变的集合需要导入可变集合的包 scala的集合主要分成三大类 Seq 序列 Set 不重复集 Map 键值映射集 注意: 所有的集合都继承自Iterator迭代器这个特质 ...

HANG.NIAN 4677

Scala之集合(1)

不可变集合:set集合特点:无序,不重复对set集合无序的理解:set集合的无序是指在使用append等方法给集合添加元素的时候所添加的元素的顺序是不可预测的,并且不能按照添加顺序进行遍历(存储位置是不一定的)Set集合的无序性是由它的实现方式所决定的。通常,Set集合的实现方式采用了哈希表这种数据结构,其中元素被散列到桶中,不同的元素可能被散列到同一个桶中,因此添加的顺序不能保证元素的顺序。set集合提供了SortedSet集合是有序的(放入2,3,1,4会按照1,2,3,4进行存储)SortedSet写

&volume的博客 1741

Java中使用Scala中的对象

准备Scala类 项目中引入 scala 2.11.12版本 2.11.8是经典版本,其实版本无所谓 /** * @Author: jsy * @Date: 2020/1/18 21:24 */ class ScalaUtils { private def initConfig(): Unit = { val str: String = "" str }...

j8130的博客 2270

Java大战Scala

目录 一:变量 二:函数 三:数据类型 四:集合 五:特殊符号 六:逻辑构建元件 七:极致的简写 八:scala中的书写规范与java区别 引言: 在今年进行职业规划中,选择了数据分析这一块儿作为以后的工作方向 结合更新效率,未来应用趋势,第一次主动的,自愿的选择了以Spark为核心的发展生态策略 此文仅是本人于scala的基础学习之后,在结合java开发及工作经验做的汇...

威少(微笑) 1679

大数据之scala_scala之集合

集合 scala中的集合分为两种 ,可变集合和不可变集合, 不可变集合可以安全的并发的访问! 集合的类主要在一下两个包中 1)可变集合包 scala.collection.mutable 2) 不可变集合包 scala.collection.immutable scala默认使用的是不可变的集合 , 因此使用可变的集合需要导入可变集合的包 scala的集合主要分成三大类 (1)Seq 序列 (2)Set 不重复集 (3)Map 键值映射集 注意: 所有的集合都继承自Iterator迭代器这个特质 序列

WuBoooo的博客 499

day09-scala的泛型、上界与下界、隐式转换

day08,我们学习了scala的集合、模式匹配、样本类。今天学习scala的泛型、上界与下界、隐式转换。

shenjinrui的博客 356

**Scalaj-Collection: 桥接Scala与Java集合的强力工具**

Scalaj-Collection: 桥接Scala与Java集合的强力工具 项目基础介绍与主要编程语言 Scalaj-Collection 是一个专为简化Scala与Java集合类型互操作而生的库。它由Scala编写的,但其核心价值在于促进两种生态之间数据结构的无缝转换,解决了跨语言项目中常见的类型适配难题。此项目对于那些在Scala和Java混合环境中工作的开发者来说,无疑是一大福音。 核心功...

gitblog_01068的博客 482

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

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

weixin_45538732的博客 1821
上一篇: Effective Java 第三版读后感第二条:多个构造器参数时考虑构建器(建造者设计模式)
下一篇: 计算机网络MAC地址的作用
Galen-gao
博客等级 码龄9年 931粉丝 137原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值