我有一个具有这种结构的Object:
@JsonProperty("id")
private Long codigoCategoria;
@JsonProperty("parentId")
private Long codigoCategoriaPai;
@JsonProperty("name")
private String nomeCategoria;
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private ComissaoPadraoEntity comissao;
@JsonProperty("categories")
private List subCategorias;
你怎么看,它有自己类型的列表,我需要用Map< Long,List< Long>>来映射这个类别.其中键是codigoCategoria,并且值必须是子类别中包含codigoCategoria的列表.
这是有效载荷结构:
{
"categories": [
{
"id": "1813",
"parentId": null,
"name": "Malas e Mochilas",
"items": 12,
"categories": [
{
"id": "1827",
"parentId": "1813",
"name": "Conjuntos de Malas",
"items": 0,
"categories": [
],
"attributes": null
},
{
"id": "1830",
"parentId": "1813",
"name": "Mochilas",
"items": 4,
"categories": [
{
"id": "1831",
"parentId": "1830",
"name": "Mochila Esportiva",
"items": 0,
"categories": [
],
到目前为止,我已经尝试了许多不同的方法,这是我已经完成的代码,但即使不编译:
private Map> mapATreeofCategories() {
List categories = getAll();
Map> treeCategories = categories.forEach(categoriaDTO -> {
categories.stream()
.collect(Collectors.toMap(categoriaDTO.getCodigoCategoria(),
categoriaDTO.getSubCategorias().forEach(categoriaDTO1 -> categoriaDTO1.getCodigoCategoria())));
});
return treeCategories;
}
谢谢你的帮助.
最佳答案 forEach方法具有void返回类型,因此不能用作valueMapper函数中的返回值.
相反,似乎你想从subCategories集合中提取CodigoCategoria,在这种情况下你需要按如下方式进行:
categories.stream()
.collect(Collectors.toMap(k -> k.getCodigoCategoria(),
v -> v.getSubCategorias().stream()
.map(e -> e.getCodigoCategoria())
.collect(Collectors.toList())
);