Hey I am working in kotlin tree data Structure. I want to know which leaf node value has minimum price rate value. My whole list is in sorted order. But I am not able to figure out, how can I know which leaf is minimum node. I'll demonstrate you small example because I have bigger data.
when I am pointing parent, I have few children node and their value is in sorted order, but problem is there is some price on it, I want to know which one is minimum and whole list is sending to my adapter android. So I don't understand where I can find minimum node. when I am creating the node or some other place?
2
| | | |
value-> 1 2 3 4
price value-> 4.38 5.8 3.2 6.7
LevelIndex.kt
open class LevelIndex(
var value: String? = null,
var children: MutableList<LevelIndex> = arrayListOf()
)
LevelOne.kt
class LevelOne : LevelIndex() {
}
LevelTwo.kt
class LevelTwo : LevelIndex() {
}
Main.kt
var baseNode: LevelIndex = LevelIndex()
fun main() {
val list = getUnSortedDataListForLevel() // this retrun ProductLevel Data Class value
val tempHashMap: MutableMap<String, LevelIndex> = mutableMapOf()
list.forEach { levelClass ->
levelClass.levelA?.let { levelA ->
val levelOneTempHashMapNode = tempHashMap["level_a${levelClass.levelA}"]
if (levelOneTempHashMapNode != null) {
return@let
}
val tempNode = LevelOne().apply {
value = levelA
}
val parent =
tempHashMap["level_a${levelClass.levelA}"] ?: baseNode
parent.children.add(tempNode)
tempHashMap["level_a${levelClass.levelA}"] =
tempNode
}
levelClass.levelB?.let { levelB ->
val tempNode = LevelTwo().apply {
value = levelB
}
val parent =
tempHashMap["level_a${levelClass.levelA}"]
?: baseNode
parent.children.add(tempNode)
}
}
}
when I am pointing to 2 value then I have children value is 1, 2, 3, 4. Can someone suggest me?
UPDATE I forgot to add data class
ProductLevel.kt
data class ProductLevel(
val id: String? = null,
val levelA: ProductValue? = null,
val levelB: ProductValue? = null,
val price: ProductValue? = null
)
ProductValue.kt
data class ProductValue(
val value: String? = null,
)
My Data looks like this
ProductLevel(id= "1", levelA= ProductLevel("2"), levelB= ProductLevel("1"), price= "4.38")
ProductLevel(id= "2", levelA= ProductLevel("2"), levelB= ProductLevel("2"), price= "5.8")
ProductLevel(id= "3", levelA= ProductLevel("2"), levelB= ProductLevel("3"), price= "3.2")
ProductLevel(id= "4", levelA= ProductLevel("2"), levelB= ProductLevel("4"), price= "6.7")
After adding this line I am getting this weird error
val result = currentItem.asFlatIterable().minByOrNull(LevelIndex::price)