有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用流映射java 8转换另一个列表中的列表

我想使用stream和Java8中的另一个选项,基于FieldError列表创建一个ErroDto列表。我在forEach上有这个,但我想在stream和map上:

fieldErrors.stream()
                   .forEach(e -> errosDto.add(new ErroDto(e.getField(), e.getDefaultMessage())));

我尝试如下,但我认为这是错误的,因为我正在修改地图中的第二个列表:

fieldErrors.stream()
               .map(e -> errosDto.add(new ErroDto(e.getField(), e.getDefaultMessage())));

然后,我想绘制地图并收集作为列表


共 (2) 个答案

  1. # 1 楼答案

    map只应将每个FieldError实例转换为ErroDto实例

    使用collect将所有ErroDto实例收集到List中:

    List<ErroDto> errosDto =
        fieldErrors.stream()
                   .map(e -> new ErroDto(e.getField(), e.getDefaultMessage()))
                   .collect(Collectors.toList());
    
  2. # 2 楼答案

    传递给map()方法的lambda表达式接受输入对象并返回输出对象。不应将其添加到map()方法本身的列表中。将来自map()的流收集到List<ErroDto>

    List<ErroDto> errosDto = fieldErrors.stream()
        .map(e -> new ErroDto(e.getField(), e.getDefaultMessage()))
        .collect(Collectors.toList());