当前位置: 首页 > 面试题库 >

如何在Java中将java.util.Map转换为scala.collection.immutable.Map?

萧无尘
2023-03-14
问题内容

我发现有很多人试图这样做,并对此进行了询问,但始终会使用scala代码来回答问题。我需要调用一个需要scala.collection.immutable.Map的API,但是我有一个java.util.Map,如何在我的Java代码中将后者从后者转换为前者?编译器不同意这种说法是一种隐式转换,因为当我尝试它时会否定它!

谢谢!


问题答案:

获取不可变的Scala映射有些棘手,因为collections库提供的转换返回的都是可变的返回值,您不能只使用toMap它,因为它需要Java编译器当然不会提供的隐式参数。具有该隐式参数的完整解决方案如下所示:

import scala.collection.JavaConverters$;
import scala.collection.immutable.Map;

public class Whatever {
  public <K, V> Map<K, V> convert(java.util.Map<K, V> m) {
    return JavaConverters$.MODULE$.mapAsScalaMapConverter(m).asScala().toMap(
      scala.Predef$.MODULE$.<scala.Tuple2<K, V>>conforms()
    );
  }
}

使用JavaConversions,用Java编写转换会更简洁一些,但是从Scala方面来说,基本上每个人都希望该废话会尽快被弃用,因此即使在这里我也避免这样做。



 类似资料:
  • 问题内容: 我正在搜索轻量级API(最好是单个类)以转换 到xml,反之亦然,将XML转换回Map。 例: 结果: 然后回来: 我不想使用JAXB或JSON转换API。只需简单的情况,它就不必处理嵌套的地图或属性或其他任何内容。有什么建议么? 编辑:我创建了一个工作副本并粘贴示例。感谢fvu和Michal Bernhard。 下载最新的XStream框架,“仅核心”就足够了。 不需要转换器或其他任

  • 问题内容: 如何将java.util.Map [String,Object]转换为scala.collection.immutable.Map [String,Any],以便将原始映射中的所有值(整数,布尔值等)都转换为正确的值,以在Scala中运作良好。 问题答案: 正如VonC所说,仅支持可变集合,但您不必使用单独的库。派生可变集合,从该集合定义了一个返回不可变Map的方法: 这将输出

  • 问题内容: 我是Java的新手,想知道double转换为int cast如何工作吗?我知道,只需将低32位转换为int就很容易了,但是将double(64位)转换为int(32位)呢?来自二进制的double中的那64位是Double- precision浮点格式(Mantissa),那么它如何在内部转换为int? 问题答案: 所有这些都记录在JLS的5.1.3节中。 第一步,将浮点数转换为lon

  • 问题内容: 我一直在这里找到问题,并且Google的人们遇到了麻烦,而不是遇到了其他麻烦。但我敢肯定,我不是以前已经从去碰到这种情况的唯一一个到。 我发现的唯一其他答案是“首先将其设置为Long”,这实际上并没有解决这个问题。 我最初尝试投射,但得到了“ ” 如您所料,我有点困惑,我被困住了,因为有些内容以形式出现,而我要存储其信息的实体要求序列号为Long。 问题答案: 请注意,强制转换为和强制

  • 问题内容: 我们如何在Java中转换成?我有一个要求,我们必须使用Double作为参数,但是我们越来越明白了,所以我必须转换成。 问题答案: 您需要使用该方法从BigDecimal对象获取double值。

  • 问题内容: (我是Java编程的新手) 我有例如: 我需要在撇号中得到数字9本身。我尝试执行以下操作 但这没用。 那么我该怎么做才能得到撇号呢? 问题答案: ASCII表的排列方式是使字符的值比的值大九;字符的值比的值大8 ; 等等。 因此,您可以通过减去以获得十进制数字char的int值。