如何获取key取决于map of map中的value

How to get key depends on value in map of map

我有以下数据:

如果我将值作为参数,我如何获得密钥?

Test1(stringtest2Map={de=Test2(name=aa, stringStringMap={alex=sven, serdar=alo})})

for example if internalName= "alo" then it should returns serdar if = "sven" then should returns alex.

我的尝试:

 Test2 test2 = new Test2();
    test2.name = "aa";
    Map<String, String> map = new HashMap<>();
    map.put("alex", "sven");
    map.put("serdar", "alo");
    test2.stringStringMap = map;
    Test1 test1 = new Test1();
    Map<String, Test2> map1 = new HashMap<>();
    map1.put("de", test2);
    test1.stringtest2Map = map1;

    System.out.println(test1.toString());

    String internalName = "alo";
    String firstName =
        test1.stringtest2Map.values().stream()
            .map(e -> e.stringStringMap.get(internalName))
            .findFirst()
            .orElse(null);
    System.out.println(firstName);



  public class Test1 {
      public Map<String, Test2> stringtest2Map;
    }



 public class Test2 {
      public String name;
      public Map<String, String> stringStringMap;
    }

但它不起作用。

首先,必须在地图上进行此类查找意味着您可能需要考虑备用数据结构来保存数据。不过,这里有一些可能的解决方案来获得您期望的结果。

1.

        Optional<Optional<String>> firstName =
                test1.stringtest2Map.values().stream()
                        .map(e -> e.stringStringMap.entrySet().stream()
                                .filter(stringStringEntry -> stringStringEntry.getValue().equals(internalName))
                                .findFirst()
                                .map(Map.Entry::getKey))
                        .findFirst();
        firstName.ifPresent(System.out::println);
        String firstName = null;
        for(Test2 t2 : test1.stringtest2Map.values()) {
            for(Map.Entry<String, String> keyValue : t2.stringStringMap.entrySet()) {
                if(keyValue.getValue().equals(internalName)) {
                    firstName = keyValue.getKey();
                    break;
                }
            }
        }
        if(firstName != null) {
            System.out.println(firstName);
        }