gpt4 book ai didi

functional-programming - 用Kotlin流收集项目

转载 作者:行者123 更新时间:2023-12-02 13:24:31 26 4
gpt4 key购买 nike

我有一个Player,它具有Bag,并且每个Bag都有项目(String):

class Player(val bags: List<Bag>)
class Bag(val items: List<String>)

我想将每个袋子及其每个物品收集在一个列表中。使用嵌套的for循环,我这样做:
val player = Player(listOf(Bag(listOf("item1.1", "item1.2")), Bag(listOf("item2.1", "item2.2"))))
val list = mutableListOf<Any>()
for (bag in player.bags) {
list.add(bag)
for (item in bag.items) {
list.add(item)
}
}

//list contains [Bag@7adf9f5f, item1.1, item1.2, Bag@85ede7b, item2.1, item2.2]

如何使用流实现相同的行为?我已经尝试过了,但是我只拿到了物品,而不是袋子:
val list = player.bags.flatMap { bag -> bag.items }

最佳答案

首先,为什么要List<Any>?通过使用此数据类型,您将丢失所有类型信息。您不能对此类列表中的元素执行任何操作,而无需进行任何强制转换(当然,除了调用Any上的方法外)。

如果您确实想这样做,可以使用flatMap像这样:

val list = player.bags.flatMap { bag -> listOf(bag) + bag.items }

如果列表的顺序不重要,我可以这样做:
val list = player.bags.flatMap { it.items } + player.bags

关于functional-programming - 用Kotlin流收集项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42131574/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com