Tengo un List de String sy estoy tratando de transformarlo en un List de Object s que tienen un campo String. Lo logré con el siguiente método

private void revertAllTypesList(List<LenderAdditionalPartyTypeEntity> allTypes, List<String> cachedTypeNames) {
        allTypes.clear();
        for(String name : cachedTypeNames) {
            LenderAdditionalPartyTypeEntity entity = new LenderAdditionalPartyTypeEntity();
            entity.setPartyType(name);
            allTypes.add(entity);
        }
}

Estoy casi seguro de que puedo mejorar esto usando Java8 Streams, ya que puedo hacer la transformación viceversa. ¿Debo usar .flatMap en lugar de la función .map o hay otro enfoque?

2
Georgi Michev 27 feb. 2020 a las 14:33

2 respuestas

La mejor respuesta

Podrías hacer algo como esto:

List<LenderAdditionalPartyTypeEntity> result = cachedTypeNames.stream()
  .map(name -> {
    LenderAdditionalPartyTypeEntity entity = new LenderAdditionalPartyTypeEntity();
    entity.setPartyType(name);
    return entity;
  }).collect(Collectors.toList());

Si ha tenido un constructor parametrizado, puede hacerlo de una manera más limpia, como esta:

List<LenderAdditionalPartyTypeEntity> result = cachedTypeNames.stream()
  .map(LenderAdditionalPartyTypeEntity::new)
  .collect(Collectors.toList());
3
Amongalen 27 feb. 2020 a las 11:47

Puedes escribirlo de la siguiente manera:

allTypes.addAll(cachedTypeNames.stream()
    .map(s -> {
            LenderAdditionalPartyTypeEntity entity = new LenderAdditionalPartyTypeEntity();
            entity.setPartyType(name);
            return entity;
        })
    .collect(Collectors.toList()));
2
Andronicus 27 feb. 2020 a las 11:39