java-8 - 如何在 Java 中使用流获取输出
问题描述
试图降低性能,我想使用流修改此代码。尝试了一些方法,但我无法得到确切的结果。
String[] arr = {"test", "test1", "test2"};
for (String a : arr){
String id = a.trim();
if (id.isEmpty()) {
continue;
}
Message childMsg = (Message)msg.get(id);
if (childMsg == null) {
continue;
}
String prodId = childMsg.getProperty("ID");
String expDate = childMsg.getProperty("DATE");
String prodMapKey = prodId + "_" + expDate;
if(hasMap && formId != null){
if(childMsg.getProperty("ID").equals(formId)){
map.put(prodMapKey,childMsg);
}
} else {
map.put(prodMapKey,childMsg);
}
}
输出应该是,需要将值放在地图中,但我不能这样做。
List<String> players = Arrays.asList(arr);
players.stream()
.filter(item-> !item.trim().isEmpty())
.filter(item -> msg.get(item)!= null)
.forEach(System.out::println);
解决方案
Map<String, Message> map = Arrays.stream(arr)
.map(String::trim)
.filter(id -> ! id.isEmpty())
.map(msg::get)
.filter(Objects::nonNull)
.filter(childMsg -> ! (hasMap && formId != null)
|| childMsg.getProperty("ID").equals(formId))
.collect(Collectors.toMap(childMsg -> childMsg.getProperty("ID") + "_" + childMsg.getProperty("DATE"),
childMsg -> childMsg);
代码未经测试。而且我不认为它的性能会比你所拥有的更好。
推荐阅读
- java - 即使连接数多于线程数,Hikari getconnection 也很慢
- java - 如何将地图列表转换为地图
- javascript - 在 JavaScript 和 date-fns 中一致地显示日期,无论时区如何
- excel - 如何在不主动使用虚拟机时保持虚拟机处于活动状态,以发送所有打开的邮件?
- php - 使用星期几和 tsrange 防止插入重叠的日期范围
- python - 为什么我的 Pepper 机器人无法被触发语句激活?
- flutter - Flutter - 在 FutureBuilder 中使用 RefreshIndicator 拉动刷新
- python - 如果您在 Python 中迭代列表或元组,它会有所不同吗?
- react-native - 使用 useNativeDriver 时通过错误反应原生动画:true 为什么?
- javascript - 电子邮件共享按钮未使用反应在电子邮件中添加正文