Java Map初始化并赋值

需求背景:
今天需要给多用户发送邮件,但是用户信息是固定的且数量有限,索性直接写死常量池,遍历常量池进行发邮件操作。设计阶段考虑使用map进行数据封装赋值。为了使代码简洁直观,调研了几种Java Map初始化并赋值的语法。

由于我目前使用的还是java jdk1.8所以还是选择第一种内联方式创建。

对于初始化一个 Map 并直接赋值为常量的场景,可以使用以下几种简短写法:


1. 直接内联创建并添加

如果只需要一个 Map,可以直接在 list.add() 方法中初始化:

List<Map<String, String>> list = new ArrayList<>();

list.add(new HashMap<>() {{
    put("companyName", "科技有限公司");
    put("loginUrl", "https://www.baidu.com/");
    put("bcc", "https://www.baidu.com/");
}});
  • 优点:减少变量声明。
  • 缺点:仍存在匿名内部类问题。

2. 使用双括号初始化 (仅推荐在测试或临时场景中使用)

List<Map<String, String>> list = new ArrayList<>();

Map<String, String> map = new HashMap<>() {{
    put("companyName", "科技有限公司");
    put("loginUrl", "https://www.baidu.com/");
    put("bcc", "https://www.baidu.com/");
}};

list.add(map);
  • 优点:写法直观,支持可变的 Map
  • 缺点:
    • 生成的匿名内部类可能会导致内存泄漏,不推荐在生产代码中使用。

3. 使用 Map.of() (Java 9+)

List<Map<String, String>> list = new ArrayList<>();

Map<String, String> map = Map.of(
    "companyName", "科技有限公司",
    "loginUrl", "https://www.baidu.com/",
    "bcc", "https://www.baidu.com/"
);

list.add(map);
  • 优点:代码简洁,不需要显式调用 put 方法。
  • 限制:
    • Map.of() 创建的 Map 是不可变的,不能再修改其内容。

4. 使用 Map.ofEntries() (Java 9+)

适用于键值对超过 10 个的场景。

List<Map<String, String>> list = new ArrayList<>();

Map<String, String> map = Map.ofEntries(
    Map.entry("companyName", "科技有限公司"),
    Map.entry("loginUrl", "https://www.baidu.com/"),
    Map.entry("bcc", "https://www.baidu.com/")
);

list.add(map);
  • 优点:支持更多键值对初始化。
  • 限制:同样生成的 Map 是不可变的。

5. 使用工具类构造

如果初始化 Map 是常见需求,可以封装一个工具方法:

public static <K, V> Map<K, V> mapOf(Object... entries) {
    Map<K, V> map = new HashMap<>();
    for (int i = 0; i < entries.length; i += 2) {
        map.put((K) entries[i], (V) entries[i + 1]);
    }
    return map;
}

调用:

List<Map<String, String>> list = new ArrayList<>();

Map<String, String> map = mapOf(
    "companyName", "科技有限公司",
    "loginUrl", "https://www.baidu.com/",
    "bcc", "https://www.baidu.com/"
);

list.add(map);
  • 优点:通用性强,可在不同场景复用。
  • 限制:需要额外的工具类支持。

根据场景选择合适的写法,如果所有内容都是常量且不可变,推荐 Map.of()Map.ofEntries() 的写法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值