【问题标题】:How to get key depends on value in map of map如何获取密钥取决于地图地图中的值
【发布时间】:2020-11-25 20:21:08
【问题描述】:

我有以下数据:

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

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

例如如果 internalName= "alo" 那么它应该返回 serdar if = "sven" 然后应该返回 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;
    }

但它不起作用。

【问题讨论】:

    标签: java stream java-stream


    【解决方案1】:

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

    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);
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 2012-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多