[Отредактировано для одновременной проверки группы значений]
[Отредактировано теперь, когда вопрос прояснен]
Эта реализация избегает явных циклов и написана более функционально с использованием расширений Guava:
import java.util.Collection;
import java.util.Map.Entry;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import com.google.common.collect.Multimap;
public class TestIt {
public static Iterable<Entry<Integer, String>> getEntrySetsForValues(
Multimap<Integer, String> fromMap, final Collection<String> values) {
return Iterables.filter(fromMap.entries(),
new Predicate<Entry<Integer, String>>() {
@Override
public boolean apply(Entry<Integer, String> arg0) {
return values.contains(arg0.getValue());
}
});
}
}
Тестовая программа:
import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;
import com.google.common.collect.Sets;
public class Test {
static Multimap<Integer, String> x = HashMultimap.create();
public static void main(String[] args) {
x.put(1, "a");
x.put(1, "b");
x.put(2, "d");
x.put(3, "e");
x.put(3, "f");
x.put(4, "a");
x.put(5, "b");
x.put(5, "c");
System.out.println(TestIt.getEntrySetsForValues(x,
Sets.newHashSet("a", "c")));
}
}
Выход:
[1 = a, 4 = a, 5 = c]
Мне было бы интересно узнать, насколько это неэффективно.