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