java - 将嵌套的for循环转换为java8流
问题描述
我正在尝试将以下代码转换为 Java 8Stream
以进行嵌套 for 循环。
我试图将流用于外部循环,但不确定如何编写条件并在那里分配变量。
final Map<String, String> events = new HashMap<>();
for (final Event s : result.getEvents()) {
String eventDetail = "";
for (final Data d : s.getData()) {
if (StringUtils.isNotEmpty(d.getValue()) && StringUtils.isNotEmpty(eventDetail)) {
eventDetail = eventDetail + "-" + d.getValue();
} else {
eventDetail = eventDetail + d.getValue();
}
}
events.put(s.getReferenceID(), eventDetail);
}
结果应该是地图值。
解决方案
看起来您的目标是将Data
每个实例的值成员连接
Event
成一个“-”分隔String
的 ,并将其映射String
到Event
的参考 ID。
这可以通过以下方式完成Collectors.joining()
:
Map<String, String>
events = result.getEvents()
.stream()
.map(s -> new SimpleEntry<>(s.getReferenceID(),s.getData().stream().map(Data::getValue).collect(Collectors.joining("-"))))
.collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue));
或者,如果您希望消除空值:
Map<String, String>
events = result.getEvents()
.stream()
.map(s -> new SimpleEntry<>(s.getReferenceID(),s.getData().stream().map(Data::getValue).filter(StringUtils::isNotEmpty).collect(Collectors.joining("-"))))
.collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue));
推荐阅读
- wpf-mediakit - WPFMediaKit HDMI 采集卡没有声音
- javascript - 解释一下这个数组减法叫什么
- javascript - 映射此 JSON 数组的 Javascript 语法是什么?
- javascript - AngularJS按钮点击绑定值输入
- php - bootstrap col位置不会显示在旁边,总是显示到底部
- python - 如何检查文本文件是否变大?
- java - 表格中的 ADF 复选框,所选行缺少时序
- batch-file - 在命令提示符中超时后禁用进程输出
- php - 带有 orderby meta_value_num 的 WordPress WP_Query Meta_key 无法正常工作
- deployment - Google Cloud Build 是否可以由 Container Registry 中的新 Docker 映像触发?