Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

238
Views
¿Cuál sería una forma idiomática en kotlin para generar una lista de elementos llamando a una función?

Digamos que hay una función que devuelve un único valor de retorno anulable. Por ejemplo:

 fun getItem(): String?

Me gustaría crear una nueva lista de elementos llamando a esta función hasta que devuelva null .

Mi idea sería escribir un iterador que repita el valor de retorno hasta que sea null . Sin embargo, ¿existe una forma más elegante o idiomática de abordar este tema?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

No estoy seguro de qué sería tbh idiomático, pero puede usar un while(true) para lograrlo.

 val list = mutableListOf<String>() while (true) getItem()?.let { list += it } ?: break

Eso básicamente se traduce en:

 while true (infinite loop). if getItem() is not null, add it to the list. if getItem() is null, then break the loop.
over 4 years ago · Santiago Trujillo Report

0

Como dice @Slaw en los comentarios, puede usar generateSequence y pasarle una referencia a su función (o una lambda que la llame si lo desea) para crear una Sequence que genere valores. Terminar cuando su función devuelve null es un comportamiento incorporado:

Devuelve una secuencia que invoca la función para calcular el siguiente valor en cada iteración hasta que la función devuelve un valor nulo.

Entonces, literalmente, puede simplemente hacer generateSequence(::getItem) para obtener su "iterador" y llamar a toList o cualquier función de secuencia que desee. Sin embargo, no es un Iterator real: puede obtener uno de esos haciendo toList() y luego llamando a iterator() en eso.

Hay muchas formas de obtener esta funcionalidad, pero creo que generateSequence es la más simple. Si necesita más control, puede encadenar una llamada takeWhile() para hacer una secuencia que termine en una condición/valor específico, o puede usar la función de creación de sequence para yield los elementos que necesita (por ejemplo, si desea tener valores nulos en allí). Y también hay enfoques que no son de secuencia como el truco de "agregar a una lista" de @Alex.T (aunque, no lo he comprobado, me imagino que eso es lo que generateSequence -> toList está haciendo debajo del capó)

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!