首页 > 解决方案 > 根据键返回列表过滤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()的编译错误

标签: javaarraylistlambdahashmap

解决方案


这应该有效。它的工作原理如下:

  1. 获取entrySet地图并创建流。
  2. 过滤以开头的键locationId
  3. 并将这些值收集到一个列表中。

         List<String> list = hm.entrySet().stream()
                      .filter(e->e.getKey().startsWith("locationId"))
                      .map(e->e.getValue())
                      .collect(Collectors.toList());


推荐阅读