加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java 8 Lambda指定地图类型并使其不可修改

发布时间:2020-12-15 04:42:49 所属栏目:Java 来源:网络整理
导读:我有以下代码,使用lambdas生成数月. MapInteger,String tempMap = new LinkedHashMap(); EnumSet.allOf(Month.class).forEach(m - { String formattedMonth = DateTimeFormatter.ofPattern("MMM").format(m); tempMap.put(m.getValue(),formattedMonth); });
我有以下代码,使用lambdas生成数月.

Map<Integer,String> tempMap = new LinkedHashMap<>();

 EnumSet.allOf(Month.class).forEach(m -> {
        String formattedMonth = DateTimeFormatter.ofPattern("MMM").format(m);
        tempMap.put(m.getValue(),formattedMonth);
    });

 MONTHS_MAP = Collections.unmodifiableMap(tempMap);

我想知道是否可以使用lambdas一次性完成所有这些操作?

return EnumSet.allOf(Month.class).stream()
                .collect(Collectors.collectingAndThen(Collectors.toMap(
                        Month::getValue,m -> DateTimeFormatter.ofPattern("MMM").format(m)
                ),Collections::unmodifiableMap));

这不起作用.我在哪里指定我想使用LinkedHashMap?

解决方法

你需要使用 the Collectors.toMap overload that accepts a Supplier<Map<K,V>>

Collectors.toMap(Month::getValue,m -> DateTimeFormatter.ofPattern("MMM").format(m)),(v1,v2) -> // whatever,LinkedHashMap::new)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读