Java 8:如何过滤并直接转换Map至目标Map,无需临时Map?
解决方案:无需临时Map的过滤转换写法
嘿,这个需求很好解决,咱们用Java 8+的Stream API就能轻松搞定,完全不用额外创建临时的apps Map。核心思路就是把原Map的键值对转换成流,先过滤掉不符合条件的条目,再直接收集成目标Map传给metrics.setApplications()。
具体代码实现
把你原来的这段代码:
Map<String, String> apps = new HashMap<>(); applications.forEach((key, app) -> { apps.put(key, app.getHomeUrl()); }); metrics.setApplications(apps);
替换成下面的写法:
metrics.setApplications( applications.entrySet().stream() // 过滤掉homeUrl为null的条目 .filter(entry -> entry.getValue().getHomeUrl() != null) // 直接收集成目标Map:键用原key,值用有效的homeUrl .collect(Collectors.toMap( Map.Entry::getKey, entry -> entry.getValue().getHomeUrl() )) );
代码解释
applications.entrySet().stream():将原Map的键值对集合转换成Stream,这样就能用Stream的各种操作来处理数据filter(...):这里过滤掉所有homeUrl为null的条目,只保留有有效URL的应用collect(Collectors.toMap(...)):把过滤后的Stream直接收集成Map<String, String>,第一个参数指定Map的键(原条目的key),第二个参数指定Map的值(应用的homeUrl)
这样一来,你不仅省去了临时Map的创建,代码也更简洁易读,而且直接完成了过滤+转换的操作,最终把符合条件的Map直接传给metrics.setApplications()。
内容的提问来源于stack exchange,提问作者Stéphane GRILLON
相关产品推荐
相关产品推荐

