gpt4 book ai didi

java - 将集合转换为 map

转载 作者:行者123 更新时间:2023-11-29 03:04:30 27 4
gpt4 key购买 nike

我有如下两个集合:

Set<String> attributes = Sets.newHashSet("aaa", "bbb", "ccc", "ddd");
Set<String> activeAttributes = Sets.newHashSet("eee", "lll", "ccc", "mmm");

将这些集合转换为 map 的想法,假设 attributes 集合应该用作此 map 的键,并且 activeAttributes 应该在计算值时使用(以防万一activeAttributes 包含集合 attributes 中的值,然后是“true”,否则应设置“false”参数):

例如:

({aaa -> false, bbb -> false, ccc -> true, ddd -> false })

我尝试创建一个 Guava 函数,将列表转换为 Map.Entry 的集合:

private static class ActiveAttributesFunction implements Function<String, Map.Entry<String, Boolean>> {

private Set<String> activeAttributes;

public ActiveAttributesFunction (Set<String> activeAttributes) {
this.activeAttributes = activeAttributes;
}

@Override
public Map.Entry<String, Boolean> apply(String input) {
return Maps.immutableEntry(input, activeAttributes.contains(input));
}
}

但是,此函数需要将此条目列表转换为映射。

请建议以何种方式可以简化此过程?

最佳答案

如果您使用的是 Java 8,您可以执行以下操作:

Set<String> attributes = Sets.newHashSet("aaa", "bbb", "ccc", "ddd");
Set<String> activeAttributes = Sets.newHashSet("eee", "lll", "ccc", "mmm");
Map<String, Boolean> map = attributes.stream().collect(Collectors.toMap(s -> s, activeAttributes::contains));
System.out.println(map);

对于早期版本的 Java 和 Guava,您可以使用 Maps.asMap从 Guava 14.0 开始:

Map<String, Boolean> map = Maps.asMap(
attributes, Functions.forPredicate(Predicates.in(activeAttributes)));

请注意,这会返回一个实时副本(对集合的任何更改都会反射(reflect)在 map 上)。如果你想要一个不可变的 map ,使用 Maps.toMap .

关于java - 将集合转换为 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32738153/

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