Get random position from String based on condition [closed] - kotlin

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 1 year ago.
Improve this question
I have one String variable like this:
var data = "FFFTTFFFT"
I want to get random position of 'T' present inside above String for which I am doing like this.
for (i in data.indices) {
if (data [i] == 'T') someList.add(i)
}
then
var randPos = someList.random()
I am able to do it using loop but I want to do it in idiomatic way in
Kotlin.

Shortest solution IMO:
val tIndices = data.mapIndexedNotNull { i, c -> i.takeIf { c == 'T' } }

Related

Correct usage of return if in Kotlin [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 6 days ago.
Improve this question
So in Kotlin you can write the below function in two ways:
fun getProduct(id: Int): Product? {
if (id < 1 ) return null
return productProvider.getProduct(id) /// Assuming getProduct NEVER fails
}
Or as below:
fun getProduct(id: Int) = if (id > 0 ){
productProvider.getProduct(id) /// Assuming getProduct NEVER fails
}else {
null
}
I am being suggested to always use the latter, as is the proper way.
Can someone point me in the right direction on this? Why is the second syntax better?
I can guess that performance wise they are exactly the same and ( IMO ) I do not find the second one more readable at all.
It is not more correct or better-performing. It is a style choice.
You do have the option of including the return type to make the second one more readable:
fun getProduct(id: Int): Product? = if (id > 0 ) {
productProvider.getProduct(id)
} else {
null
}
A when expression could also help here.

Shorten and change existing code in Kotlin [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 1 year ago.
Improve this question
I need to make a shorter version of the code below:
val y = 42
val x = "Score" + (y + 4).toString ()
Thank you in advance
You may use string interpolation:
val x = "Score${y + 4}"

Kotlin extract letters and keep only numbers in a String [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 1 year ago.
Improve this question
I have a string that is "M456456" for example, and i need to keep only the numbers. So the ouput has to be "456456"
How can i achieve this in Kotlin?
"M456456".filter(Char::isDigit)
"M456456".filter {it in '0'..'9'}
Use a regex replacement and remove all non digit characters:
val regex = """[^0-9]""".toRegex()
val input = "M456456"
val output = regex.replace(input, "")
println(output) // 456456

How to idiomatically format .apply{} in Kotlin? [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 3 years ago.
Improve this question
This might seem a little trivial, but since we read more code than we write, I want to know which of these versions looks nicer and more readable for you
private val VALUES by lazy {
mutableListOf<Value>().apply {
add(VALUE_1)
add(VALUE_2)
add(VALUE_3)
}
}
OR
private val VALUES by lazy {
mutableListOf<Value>()
.apply {
add(VALUE_1)
add(VALUE_2)
add(VALUE_3)
}
}
In other words, should we care that the method (.apply) be on the same line as the caller, or the ending curly bracket to be aligned with the (.apply) method?
As per https://kotlinlang.org/docs/reference/coding-conventions.html
Chained call wrapping
When wrapping chained calls, put the . character or the ?. operator on the next line, with a single indent:
val anchor = owner
?.firstChild!!
.siblings(forward = true)
.dropWhile { it is PsiComment || it is PsiWhiteSpace }
The first call in the chain usually should have a line break before it, but it's OK to omit it if the code makes more sense that way.
So it's up to you :)

FormatCurrency output [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 9 years ago.
Improve this question
Assuming sngX = 67521.345, What will be displayed when the line of code:
Label1.Text = FormatCurrency(sngX)
is executed.
Assuming that your system regional settings currency sign is $, leading digits is false, and digit grouping is false, then FormatCurrency(67521.345) = $67,521.35
Since you haven't specified your regional settings, and haven't said that you want to use specific values for the other FormatCurrency parameters, your results may vary.