从List、stream、Java 8创建具有嵌套属性的嵌套映射



我提出了这个问题流创建列表列表(嵌套列表(使用forEach,Java 8

class EntityCompositeId {
private Long firstId;
private Long secondId;
// getter & setter...
}
class EntityComposite {
private EntityCompositeId id;
private String first;
private String second;
// getter & setter...
}
List<EntityComposite> listEntityComposite = ....
Supose this content
1, 1, "firstA", "secondBirdOne"
1, 2, "firstA", "secondBirdTwo"
1, 3, "firstA", "secondBirdThree"
2, 1, "firstB", "secondCatOne"
2, 2, "firstB", "secondCatTwo"
2, 3, "firstB", "secondCatThree"
3, 1, "firstC", "secondDogOne"
3, 2, "firstC", "secondDogTwo"
3, 3, "firstC", "secondDogThree"
Map<Long, Map<Long, String>> listOfLists = new HashMap<>();

现在使用流我想填充像:

1 -> {1 ->"secondBirdOne", 2 -> "secondBirdTwo", 3 -> "secondBirdThree"}
2 -> {1 ->"secondCatOne", 2 -> "secondCatTwo", 3 -> "secondCatThree"}
3 -> {1 ->"secondDogOne", 2 -> "secondDogTwo", 3 -> "secondDogThree"}

我的非功能代码是:

Map<Long, Map<Long, String>> listaMunDepa = listEntityComposite.stream()
.collect(Collectors.groupingBy(
e -> e.getId().getFirstId(),
Collectors.toMap(f -> f.getId().getSecondId(), Function.identity()))
);

第二次尝试

Map<Long, Map<Long, String>> listaMunDepa = listEntityComposite.stream()
.collect(Collectors.groupingBy(
e -> e.getId().getFirstId(),
Collectors.groupingBy(EntityComposite::getId::getSecondId, EntityComposite::getSecond)) // How change this line
);

你真的很接近,而不是通过Function.identity,你应该通过EntityComposite::getSecond

listEntityComposite.stream()
.collect(groupingBy(e -> e.getId().getFirstId(),
toMap(f -> f.getId().getSecondId(), EntityComposite::getSecond)));

因为您提供了Function.identity,所以结果是Map<Long, Map<Long, EntityComposite>>,所以如上所示,您只需要为提供给toMapvalueMapper函数提取getSecondId,从而生成Map<Long, Map<Long, String>>

相关内容

  • 没有找到相关文章

最新更新