gpt4 book ai didi

Java 8 lambdas 将列表分组到映射中 - 如果每个键有多个列表项,则不同的键

转载 作者:行者123 更新时间:2023-11-30 01:49:57 24 4
gpt4 key购买 nike

我有一个关系列表。每个关系对象都有三个变量:personA、personB 和relationshipType。

relationshipType对象有两个变量:relationship(Son)和relationshipPlural(Sons)

我有一个要求,需要列出一个人的关系。如果一个人有一个妻子,那就是:

Wife      <wifeName>

如果此人有多个儿子,则为:

    Sons      <firstSonName>
<secondSonName>

是否有一个简单的 lambda 表达式,可以将关系列表转换为 map<String,List<relationship>>如果键有一个包含多个项目的列表,那么键值是relationshipType.relationshipPlural 值?

我能想到的唯一选择是使用两个表达式,

1) Collectors.toMap()创建关系类型的映射,然后

2) 处理该映射以创建另一个映射,如果映射的值是具有多个值的列表,则该映射的键将为关系Type.relationshipPlural。

提前致谢

最佳答案

您可以尝试使用 collectingAndThengroupingBy 作为下游:

private Map<String, List<RelationShip>> groupAndMapRelationships(List<RelationShip> relationShips) {
return relationShips.stream()
.collect(Collectors.collectingAndThen(
Collectors.groupingBy(RelationShip::getRelationshipType),
map -> map.entrySet().stream()
.map(e -> new AbstractMap.SimpleEntry<>(
e.getValue().size() == 1 ?
e.getKey().getRelationship() : e.getKey().getRelationshipPlural(),
e.getValue()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue))));
}

我考虑的最小 POJO 如下所示:

@Getter
class RelationShip {
String personA;
String personB;
RelationshipType relationshipType;
}

@Getter
class RelationshipType {
String relationship;
String relationshipPlural;
}

关于Java 8 lambdas 将列表分组到映射中 - 如果每个键有多个列表项,则不同的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56430234/

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