Как получить дочерние элементы с помощью Java-лямбды для размещения на карте? - PullRequest
0 голосов
/ 06 июня 2018

У меня есть один объект с этой структурой:

@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, а значение должно быть List of Long с 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;
    }

Спасибо за любую помощь, ребята.

1 Ответ

0 голосов
/ 06 июня 2018

Метод forEach имеет тип возврата void, поэтому его нельзя использовать в качестве возвращаемого значения в функции valueMapper.

Вместо этого создается впечатление, что вы хотите извлечь CodigoCategoria изsubCategories коллекция, в этом случае вам нужно сделать это следующим образом:

categories.stream() 
          .collect(Collectors.toMap(k -> k.getCodigoCategoria(), 
                      v -> v.getSubCategorias().stream() 
                             .map(e -> e.getCodigoCategoria())
                             .collect(Collectors.toList()) 
          );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...