java - 在 java 中处理流时记录警告消息
问题描述
rdsDesksByName.get(e.getKey())
如果地图没有任何键值,我想记录错误消息。我如何在流中处理这个?
目前我返回,但是如果键没有任何值,createDeskWithScope(rdsDesksByName.get(e.getKey()),ds.outOfScope())
如何增强此功能以记录错误消息,否则它应该照常处理rdsDesksByName
List<Desk> desks = deskScopesByName.entrySet()
.stream()
.flatMap(e -> {
return deskScopesByName.get(e.getKey())
.stream()
.map(ds -> {
return createDeskWithScope(rdsDesksByName.get(e.getKey()), ds.outOfScope());
});
})
.collect(Collectors.toList());
解决方案
在 flatmapping 操作中,通过 key 找到一个对象并使用if-else
条件:
- 如果对象是
null
(此类键没有值),则记录一条消息并返回Stream.empty()
。 - 否则,继续使用
createDeskWithScope
方法处理。
下面是代码的样子(未经测试,但应该给你一个想法):
List<Desk> desks = deskScopesByName.entrySet()
.stream()
.flatMap(entry -> {
String key = entry.getKey();
Desk rdsDesk = rdsDesksByName.get(key);
if (rdsDesk == null) {
log.warn("There is no Desk present for {}", key);
return Stream.empty();
} else {
return entry.getValue()
.stream()
.map(ds -> createDeskWithScope(rdsDesk, ds.outOfScope()));
}
})
.collect(Collectors.toList());
我建议将平面映射操作包装在一个方法中。
推荐阅读
- python - 带有字符串列表的 Python DataFrame 列不会展平
- sql - 从乘法建立一个总和
- ios - 如何正确地使 UICollectionView 中补充视图的布局无效
- docker - 在 Vagrant 中的 docker-compose 中设置卷
- nixos - 是否可以(或建议)使用 NixOps 将 NixOS 安装到 USB 闪存驱动器?
- xml - 将 importXML 与 php 填充的网站一起使用并抓取到 googlesheets
- visual-studio - 如何在不打开外部浏览器实例的情况下在 Visual Studio 中查看代码文档?
- android - 是否可以与 android studio 模拟器上的模拟设备共享本地目录
- android - 如何使用 ChatSDK 对 Firebase 用户进行身份验证?
- ios - 辅助功能 屏幕阅读器在 iPhone X 上有不同的行为