【问题标题】:Is there a better way to create a new ArrayList with the result of a forEach with a lambda有没有更好的方法来创建一个带有 lambda 的 forEach 的结果的新 ArrayList
【发布时间】:2020-06-10 01:25:22
【问题描述】:

如何使用另一个列表的项目的结果创建一个新的 ArrayList? requestAllFieldsList 由 WsdlServiceDTOList 元素的内容填充。

List<WsdlServiceDTO> wsdlServiceDTOList; 
List<ParameterDTO> requestAllFields = new ArrayList<>();
wsdlServiceDTOList.forEach(wsdlServiceDTO -> this.addRequestFieldsValues(requestAllFields, wsdlServiceDTO));
...
private void addRequestFieldsValues(List<ParameterDTO> requestAllFields, WsdlServiceDTO wsdlServiceDTO){
        long methodId = getServiceOperationId(wsdlServiceDTO);
        wsdlServiceDTO.setServiceOperationId(methodId);
        List<ParameterDTO> requestFields = splitString2List(wsdlServiceDTO.getRequestFields(), methodId );
        requestAllFields.addAll(requestFields);
    }

有没有办法使用 stream().map() 将 WsdlServiceDTOList 的每个元素添加到 RequestAllFields 数组列表中?类似于以下代码:

List<ParameterDTO> requestAllFields = wsdlServiceDTOList.stream()
     .map(wsdlServiceDTO -> this.addRequestFieldsValues(wsdlServiceDTO))
     .collect(Collectors.toList());
private String addRequestFieldsValues(WsdlServiceDTO wsdlServiceDTO){
        long methodId = getServiceOperationId(wsdlServiceDTO);
        wsdlServiceDTO.setServiceOperationId(methodId);
        List<ParameterDTO> requestFields = splitString2List(wsdlServiceDTO.getRequestFields(), methodId );
        return requestFields ; 
    }

我希望你们中的一些人在这种情况下有一个 lambda 解决方案 在此输入代码

【问题讨论】:

    标签: lambda functional-programming


    【解决方案1】:

    将最后一个方法中的返回类型改为Stream&lt;ParameterDTO&gt;,并用flatMap代替map

    private Stream<ParameterDTO> addRequestFieldsValues(WsdlServiceDTO wsdlServiceDTO){
        ...
        List<ParameterDTO> requestFields = splitString2List(wsdlServiceDTO.getRequestFields(), methodId);
        return Stream.of(requestFields);
    
    }
    
    List<ParameterDTO> requestAllFields = wsdlServiceDTOList.stream()
        .flatMap(wsdlServiceDTO -> this.addRequestFieldsValues(wsdlServiceDTO))
        .collect(Collectors.toList());
    

    wsdlServiceDTO -&gt; this.addRequestFieldsValues(wsdlServiceDTO)也可以简写为this::addRequestFieldsValues

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-09
    • 2021-01-10
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多