Java 如何在地图中获得给定值的a键<;字符串,列表<;字符串>>;?

Java 如何在地图中获得给定值的a键<;字符串,列表<;字符串>>;?,java,dictionary,java-stream,Java,Dictionary,Java Stream,给定一个具有以下结构的映射{group2=[form4],group1=[form1,form2,form3]}如何根据值(formN)获取键(groupN)?基本上,如果其中一个条目与我的输入表单匹配,我希望将该条目的键设置为新表单 我在想这样的事情: newForm= formAliasList.entrySet() .stream() .filter(entry -> form.toLowerCase().equals(entry.getValue()

给定一个具有以下结构的映射
{group2=[form4],group1=[form1,form2,form3]}
如何根据值(formN)获取键(groupN)?基本上,如果其中一个条目与我的输入表单匹配,我希望将该条目的键设置为新表单

我在想这样的事情:

newForm= formAliasList.entrySet()
        .stream()
        .filter(entry -> form.toLowerCase().equals(entry.getValue()))
        .map(Map.Entry::getKey)
        .findFirst().get();

由于
Map
中的值是
List
,因此您只需使用contains检查
List
中存在的
formN
,然后收集条目的键

newForm = formAliasList.entrySet()
                      .stream()
                      .filter(entry -> entry.getValue().contains(form.toLowerCase()))
                      .findFirst().map(Map.Entry::getKey).orElse(null);

对于大型数据集,这将是一个昂贵的操作。如果需要多次执行此搜索,请构建一个反向映射,映射
{form1=[group1,…],form2=[group1,…],form4=[group1,…]}