gpt4 book ai didi

java - StreamAPI Collectors.groupingBy 空集合而不是 null

转载 作者:搜寻专家 更新时间:2023-11-01 04:04:02 31 4
gpt4 key购买 nike

List<Entity> entities = ...
Map<Boolean, List<Entity>> entitiesByIsTest = entities.stream()
.collect(Collectors.groupingBy(Entity::isTest));

很明显,结果映射具有分组属性中存在的唯一键。对于具有不定式值集的类型,它必须像这样工作。但是枚举/boolean 值/其他确定的类型呢?

是否有可能比下面的代码片段更优雅地实现空集合的初始化?

if (entitiesByIsTest.get(true) == null) {
entitiesByIsTest.put(true, new ArrayList());
}

最佳答案

如果你想要Boolean键和两个映射始终初始化,使用 partitioningBy ,它具有所需的属性。

Map<Boolean, List<Entity>> entitiesByIsTest = entities.stream()
.collect(Collectors.partitioningBy(Entity::isTest));

如果键是 enum ,你必须留在groupingBy , 但您可以替换后续的 get操作

List<Entity> value=map.computeIfAbsent(key, x->new ArrayList<>());

这将构建并放置一个新的 ArrayList当且仅当没有先前的映射并在任何一种情况下返回实际映射值(与 putIfAbsent 不同)。

当然,您可以在一个急切的操作中添加所有缺失的值:

EnumSet.allOf(KeyType.class).forEach(key->map.computeIfAbsent(key, x->new ArrayList<>()));

关于java - StreamAPI Collectors.groupingBy 空集合而不是 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40000422/

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