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

如何创建字符串的静态映射->数组

蔺宇
2023-03-14
问题内容

我需要创建一个Map将给定映射String到的数组的静态对象int

换句话说,我想定义如下内容:

"fred" -> {1,2,5,8}
"dave" -> {5,6,8,10,11}
"bart" -> {7,22,10010}
... etc

有没有简单的方法可以在Java中做到这一点?

而且,如果可能的话,我想static同时为Stringint值使用常量。

编辑: 为了澄清我的意思static是值的常量,并给出我认为是正确的代码,这是我在解决方案中的第一个选项:

public final static String FRED_TEXT = "fred";
public final static String DAVE_TEXT = "dave";

public final static int ONE = 1;
public final static int TWO = 2;
public final static int THREE = 3;
public final static int FOUR = 4;

public final static HashMap<String, int[]> myMap = new HashMap<String, int[]>();
static {
    myMap.put(FRED_TEXT, new int[] {ONE, TWO, FOUR});
    myMap.put(DAVE_TEXT, new int[] {TWO, THREE});
}

请注意,这些名称不是我实际使用的名称。这只是一个人为的例子。


问题答案:

并不 需要单独的声明和初始化。如果您知道怎么做,那么所有这些都可以在一行中完成!

// assumes your code declaring the constants ONE, FRED_TEXT etc is before this line
private static final Map<String, int[]> myMap = Collections.unmodifiableMap(
    new HashMap<String, int[]>() {{
        put(FRED_TEXT, new int[] {ONE, TWO, FOUR});
        put(DAVE_TEXT, new int[] {TWO, THREE});
    }});

这里我们有一个带有初始化块的匿名类,该块是在构造函数之后的构造中执行的代码块,在这里我们已使用它来加载地图。

有时将这种语法/构造错误地称为“双括号初始化”(我想是因为有两个相邻的括号),但实际上没有这种东西。

关于这两个很酷的事情是:

  • 它将声明与内容结合起来,并且
  • 因为初始化是内联的,所以您也可以对进行内联调用Collections.unmodifiableMap(),从而使整齐的单行声明,初始化和转换成不可修改的形式。

如果您不需要/希望地图不可修改,请忽略该调用:

private static final Map<String, int[]> myMap = new HashMap<String, int[]>() {{
    put(FRED_TEXT, new int[] {ONE, TWO, FOUR});
    put(DAVE_TEXT, new int[] {TWO, THREE});
}};


 类似资料:
  • 注意此问题包含在Rust 1.0之前的语法。代码无效,但概念仍然相关。 如何在Rust中创建字符串的全局静态数组? 对于整数,这将编译: 但我无法获得类似的字符串编译:

  • 我有一个给定格式的JSON数据: 我想把它转换成地图 我在Kotlin方面没有太多经验,我主要用Python处理过此类案例,我成功地编写了以下内容: 我无法使用将数据添加到地图键值,任何想法或线索都会有所帮助。

  • 问题内容: 我想创建一个字符串映射到实例。这是正确的方法吗? 问题答案: 每当我想使用A时,我都发现切片是正确的选择,例如

  • 问题内容: 我将SET1声明为静态String [],我想将SET2声明为SET1 +其他一些参数。是否可以声明SET2与SET1静态相似(即私有静态String []),但使用上面的定义,如果不这样做的话? 问题答案: 查看Commons Util ArrayUtils.add:

  • 我有一个给定格式的JSON数据: 我想把它转换成地图 我在Kotlin方面没有太多经验,我主要用python处理过此类案例,我成功地编写了以下内容: 我无法使用向地图键值添加数据,任何想法或线索都会有帮助,谢谢。

  • 问题内容: 是否有任何使用Spring或java替换模板字符串以及值的API。 例如: 其中参数(,)中的形式。 问题答案: 我最喜欢的模板引擎是Apache Velocity 也可以与Spring很好地集成,此处有介绍性文章