Нахождение поля "row" на основе условия из yaml, которое сопоставлено с классом - PullRequest
1 голос
/ 10 января 2020
 T1:
   apis :
     - api: r1
       cnfig :
         - country: M1
           userseg: 5
           row: 4
         - country: M2
           userseg: 11
           row: 10
      - api: r2
       cnfig :
         - country: M1
           userseg: 5
           row: 6
         - country: M2
           userseg: 5
           row: 12

мне нужно найти все имя API с номером строки для userseg: 5, страна: M1 на карте со списком >>

   List<Api> collect = apis
                   .stream().filter(
                           api -> (api.getConfigs().stream()
                                   .filter(singleConfig -> singleConfig.userseg.contains("5")
                                           && singleConfig.country.equals("M1"))
                                   .count() > 0))
                   .collect(Collectors.toList());

Но сбор дает мне список всех API и все конфиги. Это дает мне настройки ниже:

   cnfig :
         - country: M1
           userseg: 5

вместе с другими настройками

   cnfig :
         - country: M2
           userseg: 10

Как мне добиться получения списка List >> с вышеуказанным условием? Я ожидаю получить r1,4 и r2,6

1 Ответ

0 голосов
/ 10 января 2020

Вы не указываете c о том, как вы хотите, чтобы эти результаты печатались, и какая-то информация о типе в вашей структуре отсутствует, но я покажу вам общую идею:

List<String> collect = apis.stream().flatMap(api ->
    api.getConfigs().stream().filter(
        singleConfig -> singleConfig.userseg.contains("5")
                     && singleConfig.country.equals("M1")
    ).map(config -> api.getApi() + "," + config.getRow())
).collect(Collectors.toList());

Это будет создать несколько записей, если элемент в apis содержит несколько совпадающих конфигов, основываясь на ваших данных, которые кажутся маловероятными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...