Есть ли лучший способ создать новый ArrayList с результатом forEach с лямбда-выражением - PullRequest
0 голосов
/ 26 февраля 2020

как я могу создать новый 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 ; 
    }

Я надеюсь, что у некоторых из вас есть лямбда-решение, в этом случае введите код здесь

1 Ответ

0 голосов
/ 26 февраля 2020

Измените тип возврата в последнем методе на Stream<ParameterDTO> и используйте 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 -> this.addRequestFieldsValues(wsdlServiceDTO) также можно сократить до this::addRequestFieldsValues.

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