一妙龄女子深夜拜访阿里P8求讲解Java与Scala集合互转

摘要:Scala,Java,JavaConverters

包括三种场景的转化

Java脚本中,将Scala集合转化为Java集合

Scala脚本中,将Scala集合转化为Java集合

Scala脚本中,将Java集合转化为Scala集合

JavaConverters隐式转换

Scala提供了大量的方法来隐式转换所有主要的Java和Scala容器类型。其中提供了如下的双向类型转换

Iterator<=>java.util.Iterator

Iterator<=>java.util.Enumeration

Iterable<=>java.lang.Iterable

Iterable<=>java.util.Collection

mutable.Buffer<=>java.util.List

mutable.Set<=>java.util.Set

mutable.Map<=>java.util.Map

mutable.ConcurrentMap<=>java.util.concurrent.ConcurrentMap

使用这些转换很简单,只需从JavaConverters对象中import它们即可。import之后,通过扩展方法 asScala 和 asJava 就可以在Scala容器和与之对应的Java容器之间进行隐式转换了

scala> import collection.JavaConverters.import collection.JavaConverters.

还有一些Scala容器类型可以转换成对应的Java类型,但是并没有将相应的Java类型转换成Scala类型的能力,它们是:

Seq=>java.util.List

mutable.Seq=>java.util.List

Set=>java.util.Set

Map=>java.util.Map

因为Java并未区分可变容器不可变容器类型,所以,虽然能将scala.immutable.List转换成java.util.List,但所有的修改操作都会抛出“UnsupportedOperationException”

scala>val jul=List(1,2,3).asJavajul:java.util.List[Int]=[1,2,3]scala>jul.add(7)java.lang.UnsupportedOperationExceptionat java.util.AbstractList.add(AbstractList.java:148)

在Java中调用使用Scala集合

Scala List => Java List

在Scala中定义方法返回List,在Java中调用得到返回值并转化为Java的list。

objectReturnScalaCollection{defreturnList():List[String]={returnList(“a”,“b”,“c”)}defreturnListType():List[Int]={returnList(1,2,3)}}

Scala list调用apply方法获得下标元素,循环一遍得到Java list,如果不是String对象,Java中得到的返回值泛型是Object,通过类型强转得到对应类型

publicstaticvoidmain(String[]args){scala.collection.immutable.Listres=ReturnScalaCollection.returnList();Listlist=newArrayList<>();for(int i=0;i<res.size();i++){list.add(res.apply(i));}System.out.println(list);// [a, b, c]scala.collection.immutable.Listres2=ReturnScalaCollection.returnListType();Listlist2=newArrayList<>();for(int i=0;i<res2.size();i++){list2.add((int)res2.apply(i));}System.out.println(list2);// [1, 2, 3]}

Scala Map => Java Map

Scala转List<Tuple2<>>,使用下标访问填充到Java Map。

defreturnMap():Map[String,Int]={returnMap(“a”->1,“b”->2)}

publicstaticvoidmain(String[]args){scala.collection.immutable.Map<String,Object>res3=ReturnScalaCollection.returnMap();// scala.collection.immutable.List<Tuple2<String, Object>> res3List = res3.toList();Map<String,Integer>map=newHashMap<>();for(int i=0;i<res3.size();i++){map.put(res3.toList().apply(i)._1(),(int)res3.toList().apply(i)._2());// {a=1, b=2}}System.out.println(map);}

Scala Set => Java Set

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值