我从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 <>中的数据存储如下图所示:
amenityName.size()
如下图:
答案 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 );