Java9 Stream Collectors新增功能(小结)
文件大小: 50k
源码售价: 10 个金币 积分规则     积分充值
资源说明: Java 9 Stream Collectors 新增功能 Java 9 中的 Stream Collectors 新增了两个重要的功能:Collectors.filtering 和 Collectors.flatMapping。这两个功能都是在 Java 8 中引入的 Collectors 的基础上进行了扩展和改进的。 Collectors.filtering 方法 Collectors.filtering 方法类似于 Stream 的 filter() 方法,但两者的使用场景不同。Stream 的 filter() 方法是在 stream 链接方法中使用的,而 Collectors.filtering 方法被设计和 groupingBy 一起使用。Stream 的 filter() 方法首先过滤元素,然后再分组。被过滤的值被丢弃无法被追溯跟踪。如果需要跟踪需要先分组然后再过滤,这正是 Collectors.filtering 能做的。 Collectors.filtering 带函数参数用于过滤输入参数,然后收集过滤元素。例如: @Test public void givenList_whenSatifyPredicate_thenMapValueWithOccurences() { List numbers = List.of(1, 2, 3, 5, 5); Map 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()); } Collectors.flatMapping 方法 Collectors.flatMapping 方法类似于 Collectors.mapping 方法,但粒度更细。两者都带一个函数和一个收集器参数用于收集元素,但 flatMapping 函数接收元素流,然后通过收集器进行累积操作。 例如,我们可以使用 Collectors.flatMapping 方法来收集博客的作者名和评论: class Blog { private String authorName; private List comments = new ArrayList<>(); public Blog(String authorName, String... comment) { this.authorName = authorName; comments.addAll(Arrays.asList(comment)); } public String getAuthorName() { return this.authorName; } public List getComments() { return comments; } } @Test public void givenListOfBlogs_whenAuthorName_thenMapAuthorWithComments() { Blog blog1 = new Blog("1", "Nice", "Very Nice"); Blog blog2 = new Blog("2", "Disappointing", "Ok", "Could be better"); List blogs = List.of(blog1, blog2); Map>> authorComments1 = blogs.stream() .collect(Collectors.groupingBy(Blog::getAuthorName, Collectors.flatMapping(Blog::getComments, Collectors.toList()))); } Java 9 中的 Stream Collectors 新增功能具有重要的实践价值,可以帮助开发者更方便地处理数据。
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。