Java 使用 set 中的键初始化映射

问题描述 投票:0回答:3

在java中,你可以根据现有集合的值初始化新地图的键集吗?

类似:

Set<String> setOfStrings = getSetFromSomeOtherFuntion();

Map<String, Boolean> map = new Hashmap<>(setOfStrings);

如果可能的话,那么我会假设映射中每个条目的值为 null,这是可以的,但如果可以设置默认值(例如,如果是布尔值,则为 false)会更好。

java
3个回答
7
投票
Map<String, Boolean> map = new HashMap<>();

setOfStrings.forEach(e -> map.put(e, false));

7
投票

您可以将流与

Collectors.toMap
一起使用,如下所示:

Map<String, Boolean> map = setOfStrings.stream()
        .collect(Collectors.toMap(Function.identity(), v -> false));

0
投票

如果你必须在构造函数中执行此操作,你可以这样做:

Set<String> set = new HashSet<String>();
set.add("Key1");
set.add("Key2");
set.add("Key3");

Map<String, Boolean> map = new HashMap<String, Boolean>() {
    {
        set.forEach(str -> put(str, false));
    }
};

System.out.println(map);

输出:

{Key2=false, Key1=false, Key3=false}

但是,这种方法有点肮脏,而且确实没有必要。您可能想看看Java“双括号初始化”的效率?

© www.soinside.com 2019 - 2024. All rights reserved.