如何用Stream在List<Map<String,Object>>中按Id查找并获取State属性
使用Java Stream实现按Id查找并获取State属性
直接通过Stream的过滤、映射和结果获取操作就能实现需求,核心代码如下:
// 查找Id为"4712"的元素并提取State属性 String targetState = test.stream() // 过滤出Id匹配的Map,用常量.equals()避免空指针 .filter(map -> "4712".equals(map.get("Id"))) // 将Map映射为State属性,强转为String类型 .map(map -> (String) map.get("State")) // 获取第一个匹配结果(若Id唯一,这就是目标元素) .findFirst() // 无匹配时返回默认值,这里用null,可按需替换为"Unknown"等 .orElse(null);
代码说明
stream():将List转换为Stream,开启流式处理filter:筛选出Id键对应值为"4712"的Map对象,使用"4712".equals(map.get("Id"))可以避免当map.get("Id")为null时抛出空指针异常map:将符合条件的Map转换为其State属性值,由于Map的值是Object类型,需要强转为StringfindFirst:返回Optional<String>类型的结果,代表可能存在的匹配值orElse:当没有找到匹配元素时,返回指定的默认值,你可以根据业务需求调整默认值(比如orElse("Not Found"))
增强健壮性的版本
如果需要处理State键不存在或类型不是String的情况,可以添加额外过滤:
String targetState = test.stream() .filter(map -> "4712".equals(map.get("Id"))) // 确保State存在且为String类型 .filter(map -> map.containsKey("State") && map.get("State") instanceof String) .map(map -> (String) map.get("State")) .findFirst() .orElse("Unknown");
内容的提问来源于stack exchange,提问作者Tom el Safadi
相关产品推荐
相关产品推荐

