Java 我们可以通过Guava库中提供的Maps.filteKey/Value方法实现类似于数据库的限制功能吗

Java 我们可以通过Guava库中提供的Maps.filteKey/Value方法实现类似于数据库的限制功能吗,java,performance,guava,Java,Performance,Guava,需要关于如何将limit定义为Google Guava Library提供的Maps.filterKeys方法的参数的任何输入,以便一旦达到限制,就无需进一步迭代 我有以下要求,其中我有Map和Predicate(在本例中是Filter) 如下所示:Maps.filterKeys(myMap,myPredicate) Map有大约5000个键,其中我想要的值一次谓词满足一定次数。我不想重复更多,而是返回filteredMap 有没有办法,或者我们需要让guava团队添加相同的作为输入参数。据我所

需要关于如何将limit定义为Google Guava Library提供的Maps.filterKeys方法的参数的任何输入,以便一旦达到限制,就无需进一步迭代

我有以下要求,其中我有Map和Predicate(在本例中是Filter)

如下所示:Maps.filterKeys(myMap,myPredicate)

Map有大约5000个键,其中我想要的值一次谓词满足一定次数。我不想重复更多,而是返回filteredMap


有没有办法,或者我们需要让guava团队添加相同的作为输入参数。

据我所知,类映射中的filterKeys方法都返回一个映射实现,它只是指定映射的装饰器,然后使用指定的谓词进行过滤。没有完成迭代过程。您必须明确地对映射项进行迭代,以便您可以(并且必须)自己实现该行为。

映射中有0次迭代。filterKeys()。
对此进行了解释:

返回一个映射,其中包含
unfiltered
中的映射,这些映射的键 满足谓词。返回的地图是未过滤的
的实时视图
; 对其中一个的更改会影响另一个

因此,它不会返回地图的过滤副本,而是返回过滤视图


如果需要筛选副本,则必须迭代筛选映射的entrySet()并填充新的entrySet(),直到达到您的限制。

谢谢,我明白了,但我们能否获得具有有限条目的视图。因为在谓词中,我不能指定限制。否则,我需要像Seelenvirtuose建议的那样对它进行迭代。这没有意义。假设您有一个包含1000000个条目的映射,并且您创建了一个仅保留以“a”开头的键的视图,该键仅限于10个条目。视图如何决定filteredMap.get(“动物”)应该返回什么?
Map.filtered()
Map.get()
都不执行迭代。所以他们不能限制任何东西。因此,您需要首先迭代以创建筛选映射的有限副本。也就是说,您可能可以使用
Iterables.limit(Maps.filterKeys(map,predicate).entrySet(),limit)
来获得要开始的条目的
Iterable