在Java8中将Map <String,String>转换为List <Object>

Lak*_*ani 1 java-8 java-stream

我有返回的API,Map<String,String>需要将其转换为DTO。

 SubjectIdAndNameDTO (id, name constructor args)
           id
           name
Run Code Online (Sandbox Code Playgroud)

当前的实现使用传统的for循环和Map.EnterSet。我如何使用Java8的功能来简单地执行以下代码。

 Map<String, String> map = getSubjectIdAndNameMap();          

 // How can this code can be improved by using Java8 Stream and method references

 List<SubjectIdAndNameDTO> subIdNameDTOList = new ArrayList<>();

 for (Entry<String, String> keyset : map.entrySet()) {
        SubjectIdAndNameDTO subjectIdNameDTO = 
                 new SubjectIdAndNameDTO(keyset.getKey(), keyset.getValue());
        subIdNameDTOList.add(subjectIdNameDTO);
 }
Run Code Online (Sandbox Code Playgroud)

Had*_*i J 6

尝试这个

  map.entrySet()
  .stream()
  .map(m->new SubjectIdAndNameDTO(m.getKey(), m.getValue()))
  .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

或作为@Eugene建议使用

 ...collect(Collectors.toCollection(ArrayList::new));
Run Code Online (Sandbox Code Playgroud)

也请访问答案。