将嵌套的 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,并将其映射StringEvent的参考 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));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章