如何在Java Stream的foreach中添加映射。

huangapple go评论79阅读模式
英文:

how to add map into foreach of Java stream

问题

我之前写了以下内容:

          events.stream()
                .map(d -> cli.getItem(d.getValue()))
                .map(event -> Report.builder()
                        .id(event.getId())
                        .value(event.getValue())
                        .build())
                .filter(r -> !excludesSet.contains(r.value))
                .forEach(r -> {
                    System.out.println(String.format(r.value);
                });

getItem 在这里返回 Item。我刚刚将 getItem 更新为 getItems,它返回 List<Item>,并且希望保留每个项的一些逻辑。这意味着我需要创建一个 foreach,并将原始的 map、filter 和 forEach 方法放在它下面的 .map(d -> cli.getItem(d.getValue())) 中,我应该如何做?

谢谢!

英文:

I previously wrote following:

          events.stream()
                .map(d -&gt; cli.getItem(d.getValue()))
                .map(event -&gt; Report.builder()
                        .id(event.getId())
                        .value(event.getValue())
                        .build())
                .filter(r -&gt; !excludesSet.contains(r.value))
                .forEach(r -&gt; {
                    System.out.println(String.format(r.value);
                });

getItem returns Item here, I just updated getItem to getItems, which returns List&lt;Item&gt;, and want to keep some logic for every item. Which means I need to create a foreach and put original map, filter and forEach method in it under .map(d -&gt; cli.getItem(d.getValue())), how could I do this?

Thanks!

答案1

得分: 3

这是使用 flatMap 的一个用例:

events.stream()
    .flatMap(d -> cli.getItems(d.getValue()).stream())
    // 以下部分保持不变

flatMap 允许您将流中的每个项映射到多个项。

英文:

This is a use case for flatMap:

events.stream()
    .flatMap(d -&gt; cli.getItems(d.getValue()).stream())
    // everything below stays the same

flatMap allows you to map each item in a stream to multiple items.

huangapple
  • 本文由 发表于 2020年9月4日 07:28:57
  • 转载请务必保留本文链接:https://go.coder-hub.com/63732923.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定