在Kotlin中过滤和处理hashmap条目

问题描述 投票:4回答:1

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

我想做以下事情:

myMap.filterValues{ someCondition }.forEach { doSomethingWithTheEntry }

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

我当然可以写

myMap.forEach { if(someCondition) doSomethingWithTheEntry }

但功能式过滤方法看起来更优雅。

hashmap kotlin
1个回答
5
投票

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.