在Java中实例化并初始化“多级”地图

nlu*_*ira 1 java

我试图在 BeeCrowd 中解决这个问题,而不使用大量的 if/elses。

蜂群问题

它包括读取使用中的 3 个输入,例如:

vertebrado
ave
carnivoro
Run Code Online (Sandbox Code Playgroud)

并输出这些输入的对应词。

aguia
Run Code Online (Sandbox Code Playgroud)

我比java更了解python,这将是我在python中的解决方案(有效):

vertebrado
ave
carnivoro
Run Code Online (Sandbox Code Playgroud)

然而,我正在努力用 Java 编写一个好的解决方案。这是我当前的 Java 解决方案(也有效):

aguia
Run Code Online (Sandbox Code Playgroud)

该解决方案的明显问题是,以这种方式填充字典是不切实际的。代码已经很大了。如果dict有很多值,有很多“深度”,那么维护起来就会很困难。

有办法减少吗?dictIE,用几行声明和初始化?

tgd*_*ies 5

按照 MC Empire 的建议使用 Map.of() :

Map<String, Map<String, Map<String, String>>> dict = Map.of(
    "vertebrado",
        Map.of(
            "ave",
                Map.of(
                    "carnivoro", "aguia",
                    "onivoro", "pomba"
                ),
            "mamifero",
                Map.of("onivoro","homem",
                        "herbivoro","vaca"
                )
        ),
    "invertebrado",
        Map.of(
            "inseto",
                Map.of(
                    "hematofago", "pulga",
                    "herbivoro", "lagarta"
                ),
            "anelideo",
                Map.of(
                    "hematofago","sanguessuga",
                    "onivoro","minhoca"
                )
        )
);
Run Code Online (Sandbox Code Playgroud)

与使用json文件相比,这还可以让您随时进行类型检查,尽管为了真正的类型安全,您需要引入名为 的类PhylumClassOrder包装您的字符串,而不是保留“字符串类型”的值。