java - 根据键返回列表过滤HashMap
问题描述
我有一个带有键的 HashMap,值是字符串。我想通过以字符串“ locationId ”开头的键值过滤HashMap,并将键中的值返回到字符串数组列表。这是 HashMap 的填充方式:
HashMap<String, String> hm = new HashMap<String, String>();
hm.put("locationId2", rs.getString("ORG_Id"));
hm.put("locationType2", rs.getString("ORG_Type"));
hm.put("StartDate2", rs.getString("START_DT_TM_GMT"));
hm.put("locationId3", rs.getString("ORG_Id"));
hm.put("locationType3", rs.getString("ORG_Type"));
hm.put("StartDate3", rs.getString("START_DT_TM_GMT"));
hm.put("locationId4", rs.getString("ORG_Id"));
hm.put("locationType4", rs.getString("ORG_Type"));
hm.put("StartDate4", rs.getString("START_DT_TM_GMT"));
hm.put("locationId5", rs.getString("ORG_Id"));
hm.put("locationType5", rs.getString("ORG_Type"));
hm.put("StartDate5", rs.getString("START_DT_TM_GMT"));
我需要数组列表中的 ORG_Id 值。
List<String> facilityIds = hm.entrySet().stream().filter(x -> x.getKey().startsWith("locationId")).collect(map -> map.values());
我找不到可以将值放入字符串列表的位置。编译错误是它无法识别values()方法。
更新 还尝试将过滤后的 Hashmap 放入另一个 HashMap 中,如下所示:
HashMap<String, String> facilityIds = currentOperatingSchedules.entrySet().stream().filter(map -> map.getKey().startsWith("locationId")).collect(Collectors.toMap(x -> x.getKey(), x -> x.getValue()));
但是得到它不识别getKey()和getValue()的编译错误
解决方案
这应该有效。它的工作原理如下:
- 获取
entrySet
地图并创建流。 - 过滤以开头的键
locationId
- 并将这些值收集到一个列表中。
List<String> list = hm.entrySet().stream()
.filter(e->e.getKey().startsWith("locationId"))
.map(e->e.getValue())
.collect(Collectors.toList());
推荐阅读
- c# - 在 ForEach 中等待/异步的正确等待是什么?
- http - http package can not convert map to query URL in flutter
- visual-studio-code - How can I debug a VS Code Problem Matcher
- vba - 我正在尝试使用 dlookup 从表单中检查表中的值是否抵抗
- php - 在 Laravel 5.8 中转换数据潜水错误结果
- html - Angular ngx-translate - How to set a default value for missing param in translation value
- javascript - How to use global variables in Vue JS components?
- coq - get field from Record Types in Coq
- javascript - jQuery exeption on click inside container
- javascript - 缓存不返回函数