如何将带有java lambda的子元素放入Map <long,list <long =“”>&gt;?

时间:2018-06-06 14:39:16

标签: java dictionary lambda

我有一个具有这种结构的对象:

@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,并且该值必须是subCategorias中的cod ofCategoria的List of Long。

这是有效载荷结构:

  {
  "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;
    }

感谢任何帮助。

1 个答案:

答案 0 :(得分: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()) 
          );