Мне нужно перебрать и вычислить Nested Map - PullRequest
0 голосов
/ 12 февраля 2019

Мне нужно перебрать карту с ключом и списком, чтобы предоставить объект другого типа.Я попытался объяснить на уровне кода.

Я попытался с циклом for, который работает нормально.Но мне нравится иметь в Java8 потоковую передачу

public Map<String, List<TestClassResult>> getComputed(
    Map<String, SourceClass[]> sourceMapObject) {

Map<String, List<TestClassResult>> response = new HashMap<>();
// Here goes the functionality
List<TestClassResult> result;
for (Map.Entry<String, SourceClass[]> entry : sourceMapObject.entrySet()) {
      result = new ArrayList<>();
      String key = entry.getKey();
      for (SourceClass value : entry.getValue()) {
        result.add(someMethod(value.id, value.empCode));
      }
      response.put(key, result);
    }
return response;
}

public class SourceClass{
   private String id;
   private String empCode;
}

public class TestClassResult{
   private String empName;
   private String empMartial;
   private int empAge;
}

Мне нужно, чтобы это было реализовано с потоками Java 8 и лямбдами

1 Ответ

0 голосов
/ 12 февраля 2019
sourceMapObject.entrySet()
                .stream()
                .collect(Collectors.toMap(
                     Entry::getKey,
                     entry -> Arrays.stream(entry.getValue())
                                   .map(value -> someMethod(value.id, value.empCode))
                                   .collect(Collectors.toList()),
                     (left, right) -> right                                          
))

Если вы точно знаете, что у вас не будет дубликатов, вы можете пропустить (left, right) -> right.Но так как в вашем существующем коде у вас было response.put(key, result);, я бы сохранил его для соответствия этому.

Суть в том, что Map::put переопределит предыдущее значение, которое вы уже имели в Map, в то время как Collectors::toMap без слияние вызовет исключение.С другой стороны, с (left, right) -> right он будет вести себя так же, как put.

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