【发布时间】:2017-07-28 12:22:06
【问题描述】:
HashBag(Eclipse Collections 框架)中保存了大量元素。现在应该删除所有出现次数少于 k 的元素。
这可以通过:
bag.removeAll(bag.selectByOccurrences(n->n<k));
缺点是,这会创建一个临时包实例,在我们的例子中会消耗大量内存。
所以我正在寻找一种就地删除方法,例如带有迭代器。 iterator() 返回的迭代器在一个元素上迭代 n 次,出现 n 次,这不适合 CPU。更好的是迭代底层ObjectIntMap 的所有不同键。在源代码中,您可以找到一个方法AbstractHashBag.getKeysView(),但它是受保护的。有没有办法通过公共 API 或任何其他想法来访问它以就地删除这些元素?
【问题讨论】: