如果对象具有TRUE值,android Map <>如何使用键名设置setText()

时间:2018-08-14 03:28:54

标签: android arraylist hashmap google-cloud-firestore

我从firestore获取数据并将其放入Map<>。之后,我想用setText方法显示具有真实值的数据。但是我使用List来存储值以检查是否存在重复循环存在问题。因此,我意识到,具有真值的键是重复循环,因为Map<> check的size()值为21。因此它循环21次,并将值重复放入List中。我如何循环1次以获取所有具有 true 值的key

我的代码如下:

private Map<String, Object> check = new HashMap<>();  //declare variable
private List<String> amenityName= new ArrayList<>(); //declare variable

if(check != null){   //check is not null
     for(Map.Entry<String, Object> entry : check.entrySet() ){
                   String key= entry.getKey();
                   Object value = entry.getValue();
                   if(value != null){
                        amenityName.add(key);
                   }
                }
             amenityName.size();   // check the size
}

Map <>中的数据存储如下图所示:

enter image description here

amenityName.size() 如下图:

enter image description here

2 个答案:

答案 0 :(得分:2)

如果我的意思正确的话。您想要获取等于“ true”的字符串值

您可以通过将for块包装在if语句中来实现

类似这样的东西:

private Map<String, String> check = new HashMap<>();  //declare variable
private List<String> amenityName= new ArrayList<>(); //declare variable

if(check != null){   //check is not null
     for(Map.Entry<String, String> entry : check.entrySet() ){
                   String key= entry.getKey();
                   String value = entry.getValue();
                   if(value != null && value.equalIgnoreCase("true")){
                        amenityName.add(key);
                   }
                }
             amenityName.size();   // check the size
}

编辑

,如果您尝试过滤最终列表中的重复键,则可以通过添加简单的if语句来完成:

for(Map.Entry<String, String> entry : check.entrySet() ){
                   String key= entry.getKey();
                   String value = entry.getValue();
                   if(value != null && value.equalIgnoreCase("true")){
                        if(!amenityName.contains(key)){
                             amenityName.add(key);
                        }
                   }
                }

答案 1 :(得分:1)

是的,您可以找到所有值为 true 的键,而无需使用for循环。请参阅我的以下示例:-

   //below is the hash map
    Map<String, Object> check = new HashMap<>();
    check.put("abc",true);
    check.put("zzz","");
    check.put("aaa",true);
    check.put("eee",null);
    check.put("rrr",true);

   //Retain all the pairs in map whose value is true
   check.values().retainAll(Collections.singleton(true));

    //add the filtered map to array list
    List<String> stringList=new ArrayList<>();
    stringList.addAll(check.keySet());

    Log.e("TAG", "onCreate************: "+check.size()+"****"+stringList );