gpt4 book ai didi

Java 8 Lambda 指定映射类型并使其不可修改

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:39:12 24 4
gpt4 key购买 nike

我有以下代码,它使用 lambda 生成月份。

 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);

我想知道是否可以改进以使用 lambda 一次执行所有这些操作?

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)

关于Java 8 Lambda 指定映射类型并使其不可修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22601660/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com