Как я могу преобразовать этот исходный код в лямбду? - PullRequest
0 голосов
/ 24 января 2019

Состоит из карты в списке объектов. Я пытаюсь сопоставить списки с одинаковым идентификатором, сравнивая их с помощью операторов цикла. Как я могу конвертировать в лямбду?

List<Map<String, String>> combineList = new ArrayList<>(); // Temp List
for(Map titleMap : titleList) { // Name List
   for(Map codeMap : codeList) { // Age List
      if(titleMap.get("ID").equals(codeMap.get("ID"))) { // compare Id
         Map<String,String> tempMap = new HashMap<>();
          tempMap.put("ID", titleMap.get("ID"));
          tempMap.put("NAME", titleMap.get("NAME"));
          tempMap.put("AGE", codeMap.get("AGE"));
          combineList.add(tempMap);
      }
   }
}

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Вы уже делаете это эффективно.Поэтому, если вы хотите, чтобы вы могли изменить тот же код, чтобы он просто использовал stream().forEach, или если вы хотите использовать больше потоков, сделайте это, как показано ниже:

titleList.stream()
        .forEach(titleMap ->
            combineList.addAll(
                codeList.stream()
                    .filter(codeMap -> titleMap.get("ID").equals(codeMap.get("ID")))
                    .map(codeMap -> {
                      Map<String, Object> tempMap = new HashMap<>();
                      tempMap.put("ID", titleMap.get("ID"));
                      tempMap.put("NAME", titleMap.get("NAME"));
                      tempMap.put("ID", codeMap.get("ID"));
                      tempMap.put("AGE", codeMap.get("AGE"));
                      return tempMap;
                    })
                    .collect(Collectors.toList())
            )
        );

Обратите внимание, что вам нужно каждый раз фильтровать из codeList, потому что ваше условиеэто так.Попробуйте использовать класс вместо Map, чтобы быть более эффективным, чище и эффективнее.

0 голосов
/ 24 января 2019

Уже предложено, но рассмотрите возможность использования класса вместо карт для удобства чтения. Я бы сделал это следующим образом:

List<Map> combineList = titleList.stream().flatMap(titleMap ->
        codeList.stream().filter( codeMap -> titleMap.get("ID").equals(codeMap.get("ID"))).map( codeMap ->{
            Map<String, Object> tempMap = new HashMap<>();
            tempMap.put("ID", titleMap.get("ID"));
            tempMap.put("NAME", titleMap.get("NAME"));
            tempMap.put("ID", codeMap.get("ID"));
            tempMap.put("AGE", codeMap.get("AGE"));
            return tempMap;
        })
    ).collect(Collectors.toList());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...