java - 如何使用 java lambda 获取子元素以放入 Map<Long, List<Long>>?

标签 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;

你怎么看,它有一个他自己类型的列表,我需要用 Map <Long,List<Long>> 映射这个类别.其中key是codigoCategoria,value必须是Long类型的List,子Categorias里面有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;
    }

感谢大家的帮助。

最佳答案

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

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

categories.stream() 
          .collect(Collectors.toMap(k -> k.getCodigoCategoria(), 
                      v -> v.getSubCategorias().stream() 
                             .map(e -> e.getCodigoCategoria())
                             .collect(Collectors.toList()) 
          );

关于java - 如何使用 java lambda 获取子元素以放入 Map<Long, List<Long>>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50723147/

相关文章:

java - 使用与随机播放匹配的按钮随机播放图像

java - 像《战地英雄》这样复杂的网页浏览器游戏是如何运作的?

java - 如何将 map 复制到另一张 map

python - pandas groupby 中 lambda 运算符的澄清

c# - IndexOf 与 Linq,接受 lambda 表达式

java - 具有 IP 验证且仅允许用户投票的机制 : problem in getting user IP address with two app servers and apache in front

java - HtmlUnit 无法自动登录网站

node.js - 如何在路由器中访问 i18n-express 字典?

python - 如何将嵌套字典列表转换为字符串,反之亦然

haskell - 我如何手动确定以下功能的最一般类型?