Итерировать карту со строкой и спискоми заменить в список - PullRequest
0 голосов
/ 11 февраля 2019

Я пытаюсь использовать концепцию Streaming для обработки HashMap в Java.

Проблема:

public class SourceClass{
    private String EmpId;
    private String EmpName;
}

public class ResultClass{
    private  String EmpId;
    private  String EmpAddress;
    private  String EmpMartialStatus;
    private  Integer EmpAge;
}

У меня есть 2 класса, которые будут использоваться как List в следующем методе.

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

 sourceClasseMap = { "doj1", 
                   <[EmpId1, EmpName1],                  
                    [EmpId1, EmpName1]> 
          }

Мой результат должен быть похож на

return ResultClassMap = { "doj1", 

   <[EmpId1, EmpAddress1, EmpMartialStatus1, EmpAge1],                                           
  [EmpId2, EmpAddress2, EmpMartialStatus2, EmpAge2]> 
}

Метод выглядит как

public Map<String, List<ResultClass>> getStausesForDevices(Map<String, SourceClass[]> sourceClasseMap){

    Expecting to use Java 8 Stream concept.
    Expecting to use Java 8 Stream concept.

1 Ответ

0 голосов
/ 11 февраля 2019

Предполагается,

ResultClass = jedis.get (SourceClass.EmpId1 + SourceClass.EmpName1)

И если вы не ограничены java8, есть способ потока сflatMapping метод из java9:

public Map<String, List<ResultClass>> getStausesForDevices(Map<String, SourceClass[]> sourceClassMap) {

    return sourceClassMap.entrySet().stream()
            .collect(groupingBy(Map.Entry::getKey,
                    flatMapping(entry -> Arrays.stream(entry.getValue()),
                            mapping(source -> jedis.get(source.getEmpId() + source.getEmpName()), toList()))));

}

Обновление

Если вы не можете использовать java9, есть решение без flatMapping:

return sourceClassMap.entrySet().stream()
        .collect(toMap(Map.Entry::getKey, entry -> Arrays.stream(entry.getValue())
                .map(source -> jedis.get(source.getEmpId() + source.getEmpName()))
                .collect(toList())));
...