【问题标题】:Filter and process hashmap entries in Kotlin在 Kotlin 中过滤和处理 hashmap 条目
【发布时间】:2018-08-13 01:56:58
【问题描述】:

我可能遗漏了一些非常明显的东西:如何在 Kotlin 中有效地过滤和迭代 HashMap 的条目?

我想做以下事情:

myMap.filterValues{ someCondition }.forEach { doSomethingWithTheEntry }

如何避免创建中间对象? filterValues 会创建一个 HashMap,这里不需要。

我当然可以写

myMap.forEach { if(someCondition) doSomethingWithTheEntry }

但函数式过滤器方法看起来更优雅。

【问题讨论】:

    标签: hashmap kotlin


    【解决方案1】:

    为避免存储中间值,您可以使用Sequence,它有点懒惰地等效于Iterable(有关详细信息,请参阅another Q&A)。

    要将Map 的条目处理为Sequence,请将其转换为.asSequence()(同样,不会创建中间集合),然后在序列上使用.filter { ... }.forEach { ... }

    myMap.asSequence().filter { someCondition(it) }.forEach { doSomething(it) }
    

    这将创建一个管道,它将逐个查询条目,检查它们的谓词,如果匹配,则运行操作,而不存储中间值。

    然而,效率取决于集合大小和操作的复杂性,因为Sequence 的惰性并不是免费的:它引入了一些开销,如果您只对小型集合运行简单的转换,这可能会变得相当大在性能关键代码中。

    【讨论】:

    • 谢谢。 “序列”是我一直在寻找的关键词。我假设“myMap.entries.asSequence()”和“myMap.asSequence()”是等价的?
    • 不客气。是的,他们是,好点,更新了答案。
    猜你喜欢
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 2021-06-03
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    相关资源
    最近更新 更多