how can I filter map entries based on set of entries

brainydexter picture brainydexter · Jun 27, 2012 · Viewed 15.5k times · Source

I'm using google guava 12 and have a map:

Map<OccupancyType, BigDecimal> roomPrice;

I have a Set:

Set<OccupancyType> policy;

How can I filter entries in the roomPrice map based on policy and return the filtered map ?

filteredMap needs to have all the values from policy. In case, roomPrice map doesnt have an entry from policy, I'd like to input default value instead.

Answer

Francisco Paulo picture Francisco Paulo · Jun 27, 2012

Since you have a Set of keys you should use Maps.filterkeys(), also Guava provides a pretty good set of predicates that you can use out of the box. In your case something like Predicates.in() should work.

So basically you end up with:

Map<OccupancyType, BigDecimal> filteredMap
    = Maps.filterKeys(roomPrice, Predicates.in(policy));

Hope it helps.