如何使用FlatMap列表从流中获取<>列表的项目

发布于 2025-01-31 00:29:16 字数 586 浏览 4 评论 0原文

我有一个DTO(POJO)的集合。

Collection<Dto> dtos = new ArrayList<>();
... <filling dto> now it has items.

DTO有一个字段列表:

class Dto {
  private List<Tag> tags; 
} 

@RequiredArgsConstructor
class Tag {
  private String name;

}

数据的示例:

dtos.get(1) => new Tag('name1.1') -> new Tag('name1.2') 
dtos.get(2) => new Tag('name2.1') 
dtos.get(3) => new Tag('name3.1') > new Tag('name3.2')
dtos.get(4) => null

一个问题L如何仅使用流java8+所有列表 是否可以使用FlatMap() ?

您的想法

I have a Collection of a Dto (Pojo).

Collection<Dto> dtos = new ArrayList<>();
... <filling dto> now it has items.

Dto has a field List:

class Dto {
  private List<Tag> tags; 
} 

@RequiredArgsConstructor
class Tag {
  private String name;

}

Example of Data:

dtos.get(1) => new Tag('name1.1') -> new Tag('name1.2') 
dtos.get(2) => new Tag('name2.1') 
dtos.get(3) => new Tag('name3.1') > new Tag('name3.2')
dtos.get(4) => null

a QUESTIONL How to get using only stream Java8+ all List
is it possible to use flatMap()

You ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

天涯离梦残月幽梦 2025-02-07 00:29:16

我认为这应该很简单,您过滤null标签,然后flatmap他们,收集列表

public static void main(String[] args) {
    Dto dto1 = new Dto(Arrays.asList(new Tag("name1.1"), new Tag("name1.2")));
    Dto dto2 = new Dto(Arrays.asList(new Tag("name2.1")));
    Dto dto3 = new Dto(Arrays.asList(new Tag("name3.1"), new Tag("name3.2")));
    Dto dto4 = new Dto(null);

    Collection<Dto> dtos = new ArrayList<>(Arrays.asList(dto1, dto2, dto3, dto4));

    List<Tag> tags = dtos.stream().filter(dto -> dto.getTags() != null).flatMap(dto ->
            dto.getTags().stream()).collect(Collectors.toList());

}

I think this should be straightforward, you filter the null tags then flatmap them and collect to a list

public static void main(String[] args) {
    Dto dto1 = new Dto(Arrays.asList(new Tag("name1.1"), new Tag("name1.2")));
    Dto dto2 = new Dto(Arrays.asList(new Tag("name2.1")));
    Dto dto3 = new Dto(Arrays.asList(new Tag("name3.1"), new Tag("name3.2")));
    Dto dto4 = new Dto(null);

    Collection<Dto> dtos = new ArrayList<>(Arrays.asList(dto1, dto2, dto3, dto4));

    List<Tag> tags = dtos.stream().filter(dto -> dto.getTags() != null).flatMap(dto ->
            dto.getTags().stream()).collect(Collectors.toList());

}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文