文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java9中新增的Collector收集器怎么使用

2023-07-02 08:53

关注

今天小编给大家分享一下Java9中新增的Collector收集器怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

前言:

Java 8中添加了收集器Collectors,这有助于将输入元素累积到诸如MapListSet等可变容器中。

在本文中,我们将探讨Java 9中添加的两个新收集器:Collectors.filtering 和 Collectors.flatMappingflatMapping与收集器结合使用。通过提供智能元素集合进行分组。

Filtering Collector

Collectors.filtering类似于流过滤器Stream filter();它用于过滤输入元素,但用于不同的场景。流的过滤器在流链中使用,而过滤是一个收集器,设计用于与groupingBy一起使用。

使用流的过滤器,首先过滤值,然后对其进行分组。这样,被过滤掉的值就消失了,没有任何痕迹。如果我们需要一个跟踪,那么我们需要先分组,然后应用过滤,这实际上是Collectors.filtering做的。

Collectors.filtering功能用于过滤输入元素,收集器用于收集过滤后的元素:

@Testpublic void givenList_whenSatifyPredicate_thenMapValueWithOccurences() {    List<Integer> numbers = List.of(1, 2, 3, 5, 5);    Map<Integer, Long> result = numbers.stream()      .filter(val -> val > 3)      .collect(Collectors.groupingBy(i -> i, Collectors.counting()));    assertEquals(1, result.size());    result = numbers.stream()      .collect(Collectors.groupingBy(i -> i,        Collectors.filtering(val -> val > 3, Collectors.counting())));    assertEquals(4, result.size());}

FlatMapping Collector

Collectors.flatMapping类似于Collectors.mapping。但有一个更细粒度的目标。两个采集器都接受一个函数和一个采集器,其中收集元素,但flatMapping函数接受元素流,然后由采集器累积。

让我们看看下面的模型类:

class Blog {    private String authorName;    private List<String> comments;          // constructor and getters}

Collectors.flatMapping允许我们跳过中间集合,直接写入映射到收集器定义的组的单个容器。

分组方式:

@Testpublic void givenListOfBlogs_whenAuthorName_thenMapAuthorWithComments() {    Blog blog1 = new Blog("1", "Nice", "Very Nice");    Blog blog2 = new Blog("2", "Disappointing", "Ok", "Could be better");    List<Blog> blogs = List.of(blog1, blog2);            Map<String,  List<List<String>>> authorComments1 = blogs.stream()     .collect(Collectors.groupingBy(Blog::getAuthorName,        Collectors.mapping(Blog::getComments, Collectors.toList())));           assertEquals(2, authorComments1.size());    assertEquals(2, authorComments1.get("1").get(0).size());    assertEquals(3, authorComments1.get("2").get(0).size());    Map<String, List<String>> authorComments2 = blogs.stream()      .collect(Collectors.groupingBy(Blog::getAuthorName,         Collectors.flatMapping(blog -> blog.getComments().stream(),         Collectors.toList())));    assertEquals(2, authorComments2.size());    assertEquals(2, authorComments2.get("1").size());    assertEquals(3, authorComments2.get("2").size());}

Collectors.mapping将所有分组作者的注释映射到收集器的容器(即列表),而此中间集合将使用flatMapping删除,因为它提供了要映射到收集器容器的注释列表的直接流。

以上就是“Java9中新增的Collector收集器怎么使用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯