Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

464
Vistas
Kotlin Cómo usar java streams .map() en kotlin para mapear una respuesta de objeto diferente

Estoy tratando de asignar una matriz de objetos a otra matriz con diferentes tipos de objetos, solía hacer esto usando secuencias en Java 8, era bastante sencillo, crear una instancia de un objeto, establecer sus valores y devolver el objeto. Me acabo de cambiar a Kotlin y realmente a veces es más confuso hacer este tipo de operaciones. Todos los ejemplos que encontré son realmente simples y no pude encontrar algo que quiero.

Tengo esta clase BalanceMap:

data class BalanceMap @JsonCreator constructor( var balType: String, var value: Any )

Estoy obteniendo los datos del servicio web.

 val balances: List<AcctBal> = res.getAcctBals();

la clase AcctBal se ve así

 public class AcctBal { @SerializedName("CurAmt") @Expose private CurAmt curAmt; @SerializedName("Desc") @Expose private String desc; @SerializedName("ExpDt") @Expose private LocalDateTime expDt; }

e intente asignar esa respuesta a var balanceList: List<BalanceMap>

 balances.map {}

--> var balanceList: List<BalanceMap> = balances.map { t -> fun AcctBal.toBalanceMap() = BalanceMap( balType = "", value = "" )}

Quiero hacer algo como esto:

 List<ProductDetail> details = acctBal.stream().filter(f -> f.getBalType() != null).map(e -> { String bal = e.getBalType(); if (avalProductInfo.getBankId().equals("00010016")) { bal = e.getBalType(); } ProductDetail detail = new ProductDetail(); detail.setItem(bal); if (e.getCurAmt() != null) { detail.setValue(e.getCurAmt().getAmt().toString()); } else if (e.getRelationDt() != null) { detail.setValue(e.getRelationDt().toGregorianCalendar().getTimeInMillis()); } else if (e.getMemo() != null) { detail.setValue(e.getMemo()); } return detail; }).collect(toList());

He estado experimentando pero siempre sale mal, cualquier ayuda será muy apreciada. ¡Feliz codificación!

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

algunos prototipos rápidos

 details = acctBal .filter{ f -> f.getBalType() != null } .map { it -> mapToProductDetail (it) }

puedes echar un vistazo aquí

over 4 years ago · Santiago Trujillo Denunciar

0

Gracias a @Hakob Hakobyan por apuntar en la dirección correcta.

Dejé mi solución así:

 fun mapRs(rs: AthProductResponse): BalanceByAccountRs { val res = rs.getPartyAcctRelRec(); val balances: List<AcctBal> = res.getAcctBals(); val account = Account(res.getPartyAcctRelInfo().depAcctId.acctId, res.getPartyAcctRelInfo().depAcctId.acctType) var balanceList: List<BalanceMap> = balances .filter { f -> f.getDesc() != null } .map { it -> mapToProductDetail(it) } .toList() return BalanceByAccountRs(account, balanceList) } fun mapToProductDetail(bal: AcctBal): BalanceMap { var propertyValue: Long = 0L; if(bal.getExpDt() != null) { propertyValue = Timestamp.valueOf(bal.getExpDt()).getTime() } else { propertyValue = bal.getCurAmt().getAmt().toLong() } return BalanceMap(bal.getDesc(), propertyValue) }

Por si alguien está pasando por lo mismo. Codificación feliz

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda