作者:love糸_603 | 来源:互联网 | 2022-12-25 16:38
我可能遗漏了一些非常明显的东西:如何在Kotlin中有效地过滤和迭代HashMap的条目?
我想做以下事情:
myMap.filterValues{ someCondition }.forEach { doSomethingWithTheEntry }
如何避免创建中间对象?filterValues将创建一个HashMap,这里不需要它.
我当然可以写
myMap.forEach { if(someCondition) doSomethingWithTheEntry }
但功能式过滤方法看起来更优雅.
1> hotkey..:
为了避免存储中间值,您可以使用Sequence
,这有点懒惰等效Iterable
(有关详细信息,请参阅另一个问答).
要处理的条目Map
为Sequence
,与将其转换.asSequence()
(同样,没有中间集合创建),然后使用.filter { ... }
与.forEach { ... }
该序列:
myMap.asSequence().filter { someCondition(it) }.forEach { doSomething(it) }
这将创建一个管道,它将逐个查询条目,检查它们的谓词,如果匹配,则运行操作,而不存储中间值.
然而,效率取决于集合大小和操作的复杂性,因为懒惰Sequence
不是免费的:它引入了一些开销,如果你只在性能关键代码中运行小集合的简单转换,这可能会变得相当大.