如何将带有java lambda的子元素放入Map中 >?

问题描述 投票:4回答:1

我有一个具有这种结构的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<CategoriaDTO> subCategorias;

你怎么看,它有自己的类型列表,我需要用地图<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<Long, List<Long>> mapATreeofCategories() {
        List<CategoriaDTO> categories = getAll();
        Map<Long, List<Long>> treeCategories = categories.forEach(categoriaDTO -> {
            categories.stream()
                    .collect(Collectors.toMap(categoriaDTO.getCodigoCategoria(),
                            categoriaDTO.getSubCategorias().forEach(categoriaDTO1 -> categoriaDTO1.getCodigoCategoria())));
        });
        return treeCategories;
    }

谢谢你的帮助。

java dictionary lambda
1个回答
1
投票

forEach方法具有void返回类型,因此不能用作valueMapper函数中的返回值。

相反,似乎你想从CodigoCategoria集合中提取subCategories,在这种情况下你需要按如下方式进行:

categories.stream() 
          .collect(Collectors.toMap(k -> k.getCodigoCategoria(), 
                      v -> v.getSubCategorias().stream() 
                             .map(e -> e.getCodigoCategoria())
                             .collect(Collectors.toList()) 
          );
© www.soinside.com 2019 - 2024. All rights reserved.