当前位置: 首页 > 知识库问答 >
问题:

在Java的一行中创建一个键和值的映射

钮边浩
2023-03-14

有没有办法创建一个同时包含键和值的映射(我指的是单行代码)?例如,我创建了一个名为map的映射,每当我想添加一对新的键/值时,我都需要使用方法“put”。当我们创建地图时,有没有一种更短的方法来填充它?

Map<String, String> map = new HashMap<String, String>();
    map.put("A", "32");
    map.put("C", "34");
    map.put("T", "53");

共有2个答案

东门修文
2023-03-14

在Java8中,您可以使用以下方法,在这里进行解释:

Map<String, String> map = Collections.singletonMap("A", "32");
Map<String, String> map = Collections.emptyMap();

假设您的数据在对象的ArrayList中,其中包含可以使用任意getters访问的Data,则可以使用Streams API:

List<Data> dataList = new ArrayList<>();
// .... populate data list
Map<String, Integer> nameToAge = dataList.stream().collect(
    Collectors.toMap(Data::getFooAsKey, Data::getBarAsValue)
);

...或者使用内联映射方法(如果您没有/需要/想要创建dataList):

Map<String, Integer> map = Stream.of( 
    new Data("A", "32"), new Data("C", "34"), new Data("C", "34")
).collect(Collectors.toMap(User::getFooAsKey, User::getBarAsValue));
Map<String, String> map = new HashMap<String, String>({{
    put("A", "32");
    put("C", "34");
    put("T", "53");
}});

由于这种方法会导致内存泄漏,因此强烈建议不要使用。

Map<String, String> immutableMap = Maps.newHashMap(
    ImmutableMap.of("A", "32", "C", "34", "T", "53")
);

从Java9开始,就有了更好的语法支持,如David的回答所述。

益智明
2023-03-14

在Java9中,JEP269定义了一些新的Map helper方法:集合的便利工厂方法。

Map<String, String> map = Map.of("A", "32", "C", "34", "T", "53");

但这只适用于最多10个条目。对于超过10个,请使用:

import static java.util.Map.entry;

Map<String, String> map = Map.ofEntries(
    entry("A", "32"), entry("C", "34"), entry("T", "53"));

如果需要在早期版本中使用,可以编写类似的助手方法。

 类似资料:
  • 我试图将一个键的值链接到另一个键的值,但似乎无法使其工作。 例如,如果我创建一个哈希映射,我希望能够创建一个键值对,比如(“x”,0)。然后,我希望能够将另一个键值对值添加到第一个键值对中,因此,如果我有(“x”,map.get(“y”))和(“y”,0),我希望能够以某种方式将其链接起来,这样,如果我现在更新y,使其(“y”,10),map。得到(“x”);也应该返回10。 我不知道如何让这个工

  • 我知道这是一个可怕的黑客行为,但我需要编辑一个外部库以符合我们项目的需要。我正在更改的项目将类映射存储到所述类的实例。这个项目的初衷是不可能有重复的类,但我需要它们。我的解决方案是对每个相关对象应用一个UniqueClass字段,然后每个对象都有一个对我需要创建其实例的类的引用。这样,UniqueClass是什么其实根本不重要,只是它是唯一的。 现在,我需要一种方法在运行时创建一个唯一的类来存储在

  • 我成功创建了一个包含1个键和2个值的查找表: 但当我试图将其扩展到4个值时,我发现了一系列错误,我发现条目仅限于2个值! 那么,请,如何对1个键和4个值做类似的事情?我不能通过为第一个映射的第二个参数声明内部map.entry来扩展它。条目,因为在这一点上,第一个字符串不再是唯一的,我是说,映射的所有参数。条目 你们不需要走我走的路。你们可以自由地提供任何解决方案/数据结构,允许我存储和检索3个字

  • 问题内容: 我正在使用MS SQL Server Management Studio。我有桌子- 我想从该表创建另一个包含2列的表,以便column_1在Num_ID中提供唯一值(即1,2,3,4等),而column_2在Alpha_ID中提供唯一值(A,B,C等) 。 但是,如果已经出现一个字母,则不应再次出现。所以输出将是这样的- 希望这是有道理的。我想澄清一下,输入表中的ID不是我所显示的数

  • 我有一个地图,里面有另一个HashMap。如何将内部图的值求和并进行比较? 地图的大小也是可以改变的。所以我在寻找一个解决方案,它适用于所有大小的地图。 这些值的值为-->{0,20},{0,9,1}... 我只想把这些值求和,找出最大的一个。

  • 我是Java中Spring框架的新手。并且有一些问题… 我的应用程序使用Spring、Spring seq的安全性、Hibernate框架。 我正在编写一些简单的应用程序。 我有一个页面,可以通过Hibernate将用户添加到db。 用户类: 角色类: 保存在控制器中: 在UserDAO中保存 我在页面上有一个选择块,我可以在其中选择用户角色作为字符串。 所以在保存用户时,我有 所以据我所知,我应