热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何用Java构建自定义收集器?

如何用 Java 构建自定义收集器?原文:https://www . geesforgeks . org/如何在 java 中构

如何用 Java 构建自定义收集器?

原文:https://www . geesforgeks . org/如何在 java 中构建自定义收集器/

Java Collector 是为收集器接口提供很多有用的方法和函数的实用程序类。收集器实现主要与 stream collect()方法一起使用。收集器接口是由 Java 8 在新引入的 Java Stream API 的部分下提供的。这个接口提供了各种方法来执行相互归约操作。可变归约操作对流中的数学信息执行算术函数,以找到流的最小、最大、平均或累加元素到一个集合中,或者连接流中的所有字符串元素。

创建自定义收集器的步骤

为了编写自定义收集器,我们应该用下面提到的方法实现接口。收集通常分四个步骤进行,由 Streams API 提供。


  • supplier (): This is the first step of the element collection process, in which a container is created to hold the elements in the stream. The return type of this method is the supplier of container type.

  • Accumulator (): This is the second step of adding each element to the container created by the supplier step. In this method, we must return a dual-consumer function that accepts every element in the container and stream.

  • combinator () : This is an optional step, which can only be executed when processing streams in parallel times. If the streams are sequential, skip this step. The combining step is used to combine all elements into one container. In this method, we should return a binary operator function that combines two accumulation containers.

  • Finish (): is the last step in the collection process. Only when all elements in the flow are successfully accumulated in the supplier container will it be executed. In this method, we can return a function to convert the accumulated and combined containers into the final output.

除了这些方法之外,我们还有特性()方法来指定收集器的特性以及一组特性的返回类型 Enum 值。

例子

为了说明这个例子,为了更好地理解,我们将把代码分成三个部分。让我们举一个例子,我们有一个 Employee 对象的列表,我们想从中创建一个流,并将 Employee 对象收集为一个不可变的三元组列表。列表中的每个三元组将代表一名员工,并且它将具有该员工的年龄、名字和姓氏。

爪哇

T5

public class Employee_GFG {
    private long id;
    private String firstName;
    private String lastName;
    private int year;
    public Employee_GFG(long id, String firstName,
                        String lastName, int year)
    {
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
        this.year = year;
    }
    public long getId() { return id; }
    public void setId(long id) { this.id = id; }
    public String getFirstName() { return firstName; }
    public void setFirstName(String firstName)
    {
        this.firstName = firstName;
    }
    public String getLastName() { return lastName; }
    public void setLastName(String lastName)
    {
        this.lastName = lastName;
    }
    public int getYear() { return year; }
    public void setYear(int year) { this.year = year; }
}


推荐阅读
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • Commit1ced2a7433ea8937a1b260ea65d708f32ca7c95eintroduceda+Clonetraitboundtom ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
author-avatar
qinsg688_377
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有