Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

211
Visualizações
¿Cómo puedo usar el flujo de Java para crear una matriz iterando en todos los elementos de una colección anidada?

Estoy trabajando en una aplicación Java y estoy tratando de entender si el concepto Stream puede ser útil para mi caso de uso.

Estoy tratando de hacer algo similar a lo que encontré en un ejemplo, pero mi caso de uso parece ser más complejo. Este fue el ejemplo original:

 String[] profili = utente.getRuoli() .stream().map(a -> "ROLE_" + a).toArray(String[]::new);

Básicamente, está creando una matriz a partir de una secuencia.

Siguiendo mi situación. Tengo esta clase DTO de usuario principal que representa a un usuario:

 @Data public class User { private int id; private String firstName; private String middleName; private String surname; private char sex; private Date birthdate; private String taxCode; private String eMail; private String pswd; private String contactNumber; private Date createdAt; private Set<Address> addressesList; private Set<UserType> userTypes; }

La clase DTO anterior contiene este campo que representa una colección de tipos de usuarios (por ejemplo, "ADMIN", "LECTOR", "ESCRITOR", etc.). Esto porque un usuario puede tener varios tipos:

 private Set<UserType> userTypes;

Esta es la estructura UserType :

 @Data public class UserType { private int id; private String typeName; private String description; Set<Operation> operations; }

Además, esta clase contiene un campo que representa una colección de operaciones (esto porque un tipo de usuario puede tener varias operaciones que puede realizar en el sistema), este campo:

 Set<Operation> operations;

Ahora pregunto si puedo usar la secuencia de manera similar al ejemplo original para crear una matriz de todas las operaciones contenidas en todos los tipos de usuarios.

¿Es posible? ¿Cuál podría ser una solución inteligente? O tal vez la mejor manera es el "estilo antiguo" (¿iterar en todo el objeto en el conjunto de tipos de usuario, luego iterar en todo el elemento en el conjunto de operaciones y agregarlo manualmente a una matriz?). Funcionará, pero ¿cuál podría ser una solución ordenada y elegante usando stream? (si existe)

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Usa flatMap() en las operaciones Set , con distint( distinct() :

 Operation[] operations = user.getUserTypes().stream() .map(UserType::getOperations) .flatMap(Set::stream) .distinct() .toArray(Operation[]::new);
over 4 years ago · Santiago Trujillo Relatório

0

Parece que lo que quieres es solo

 userList.stream() .flatMap(user -> user.getUserTypes().stream()) .flatMap(userType -> userType.getOperations().stream()) .toArray(Operation[]::new);

...asumiendo que estás usando captadores. Esto le brinda todas las operaciones para cada tipo de usuario para cada usuario.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda