函数式编程-收集器

Java 8函数式编程之收集器应用 Java 8引入了函数式编程的特性,其中一个强大的功能是流(Stream)和收集器(Collector)的结合使用。Java 8的函数式编程提供了强大的收集器功能,通过使用内置的收集器或自定义收集器,我们可以方便地对流元素进行聚合、分组、计数等操作。收集器是在流的末端操作中使用的工具,它用于将流转换为其他形式,例如集合(List、Set等)或映射(Map)等。这些只是收集器的一小部分示例,Java 8还提供了更多强大的收集器,可以根据具体的需求选择适合的收集器应用于流操作中。来保存累加的和以及元素的个数。 阅读详情

集合对象收集器

1、toList

 @Test
    public void givenUsers_withMap_thenTransformUsingStream() {
        List<UserDTO> userDTOList = userList.stream().map(user -> UserDTO.builder()
                .username(user.getUsername())
                .enabled(user.isEnabled() ? "可用" : "不可用").build()).collect(Collectors.toList());
        assertEquals(3, userDTOList.size());
    }

2、toSet

 @Test
    public void givenUsers_withToSet_thenSuccess() {
       Set<String> usernames = userList.stream()
               .map(User::getName)
               .collect(toSet());
       assertEquals(2, usernames.size());
    }
    
    @Test
    public void givenUsers_withToCollection_thenSuccess() {
        Comparator<User> byAge = Comparator.comparing(User::getAge);
        TreeSet<User> users = userList.stream()
                .collect(toCollection(() -> new TreeSet<>(byAge)));
        assertEquals(30, users.stream().map(User::getAge).findFirst().orElse(-1));
    }

3、toMap

 @Test
    public void givenUsers_withToMap_thenSuccess() {
        Map<String, User> userMap = userList.stream()
                .collect(toMap(
                        User::getUsername,
                        user -> user
                ));
        assertTrue(userMap.containsKey("lisi"));
        Map<String, User> duplicateMap = Stream.concat(userList.stream(), userList.stream())
                .peek(user -> log.debug("username, {}", user.getUsername()))
                .collect(toMap(
                        User::getUsername,
                        user -> user,
                        (existing, replace) -> existing
                ));
        assertEquals(3, duplicateMap.keySet().size());
        TreeMap<String, User> sortedMap = Stream.concat(userList.stream(), userList.stream())
                .peek(user -> log.debug("username, {}", user.getUsername()))
                .collect(toMap(
                        User::getUsername,
                        user -> user,
                        (existing, replace) -> existing,
                        TreeMap::new
                ));
        assertEquals("lisi", sortedMap.keySet().stream().findFirst().get());
    }
Java函数式编程之【Stream终止操作】【收集操作collect()与分组分区】【下游收集器】 分组收集器groupingBy()用于按条件对元素进行分组,并将结果存储在Map实例中。其作用与数据库的SQL语句的group by的用法有异曲同工之妙。分区收集器partitioningBy()是分组groupingBy()的特殊情形,实质是根据断言分成二个分组。 下游收集器允许在分组分区操作后进行更复杂的收集操作。 下游收集器大大增强了Java Stream API的数据处理能力,使得复杂的数据聚合操作变得简洁而高效。 阅读详情

相关推荐

Java函数式编程之【Stream终止操作】【收集器toMap()】【叁参数收集操作collect()】

本文详细介绍Collectors.toMap收集器和 三参数 collect() 操作。 Collectors.toMap() 是 一个非常实用的收集器,简洁高效地将流数据转换为各种形式的 Map 结构。它提供了多种重载形式,可以满足不同的映射需求。 三参数 collect() 实际上相当于自己定制实现一个 Collector。三参数形式提供了更底层的控制,而 Collectors 提供了更高级的、预定义的常见操作。

weixin_42369079的博客 1187

Java函数式编程三之收集器

Java函数式编程二 本文主要介绍高级集合类和收集器 方法引用 Lambda 表达式有一个常见的用法:Lambda 表达式经常调用参数,如: student -&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; student.getName() java8提供了一个简写语法,叫做方法引用, 在这里插入代码片 ...

孙朝阳的博客 341

深入理解Java函数式编程与流的收集器

本文深入探讨了Java中Lambda表达式在面对checked exception时的处理技巧,并详细介绍了Java流操作中的collect()终端操作及其预定义收集器的使用方法。通过具体的代码示例,展示了如何将流元素收集到各种类型的集合中,并解释了在使用收集器时需要注意的事项和最佳实践。

weixin_35950531的博客 320

java 读取classpath下的文件

1,获取classpath路径 EnvironmentPostProcessorCustomer为获取类路径的类 // classpath目录下 URL resource = EnvironmentPostProcessorCustomer.class.getResource("/"); System.out.println(resource); //file:/E:/daima/0903/scf/scf_base/target/classes/ // classpath+该类所在路径 URL res

liuerchong的博客 2092

Ubuntu环境下rknn-toolkit2的安装与兼容性解析

本文详细解析了在Ubuntu系统上安装瑞芯微rknn-toolkit2工具链的完整流程与关键注意事项。文章重点剖析了rknn-toolkit2与旧版rknn-toolkit的核心兼容性问题,强调两者在API、模型格式及运行时库上互不兼容,并推荐使用Conda虚拟环境进行隔离管理,为RK3566、RK3588等开发板的AI模型部署提供清晰的实践指南。

weixin_29041767的博客 375

游戏开发实战:5种AOI算法对比(九宫格 vs 灯塔 vs 十字链表)

本文深入对比了游戏开发中五种主流AOI算法(九宫格、灯塔、十字链表等)的性能与适用场景,帮助开发者根据项目规模选择最优解决方案。通过详细的技术分析和实战数据,揭示不同算法在万人同屏等极端场景下的表现差异,为MMORPG等大型多人在线游戏提供关键性能优化指南。

weixin_29268385的博客 476

Lambda表达式和函数式编程

一.函数式编程概念 (a,b) -> {xxx} 参数 -> 方法体 左侧一个参数时()可以省略,右侧就一句方法体时{}可以省略 二.JDK8引入的函数是编程接口类 要想学习函数式编程一定要知道jdk提供的四种类型的函数式编程接口 1.Function<T, R> 该类型的方法接收一个T类型的参数,返回一个R类型的结果 2.Consumer<T> 该类型方法接收一个T类型的参数,无返回值 3.Supplier<T> 该类型方法不接收任何参数,返回一个

诗和远方 1041

芯片低功耗设计的两种常用EDA流程

如题。

EricWZY2008的专栏 5558

多线程并发总结三 函数式编程

多线程的问题根本上面就是因为存在共享的可变变量导致的。 所以如果变量不共享,或者不可变,那么就不会有多线程的问题了。 所以如果我们改变一下我们写代码所使用的范式,改成函数式,那么多线程的问题也就迎刃而解了。 在函数式的规范下面,我们写出来的函数都是纯函数,函数里面既没有变量也没有对外访问的IO操作。 纯函数在任何的时候去访问它,给到的返回值都是一样的。 那么如果不访问IO,那么我们的系统...

乐客的专栏 1146

Windows下用VS2022编译libcurl全流程(含openssl配置避坑指南)

本文详细介绍了在Windows平台使用Visual Studio 2022编译libcurl库的完整流程,重点解决了集成OpenSSL支持HTTPS功能时的常见配置难题。从环境准备、源码获取、依赖编译到工程配置,提供了清晰的步骤和针对非默认安装路径的避坑指南,帮助开发者高效完成网络库的集成工作。

weixin_29291185的博客 245

abaqus 根据坐标施加载荷- Analytical Field 载荷映射

在一些类型的分析中,需要将按位置分布的载荷施加到结构上,比如流体分析导出了结构的气动载荷、或者温度载荷,需要将压强分布、温度分布载荷施加到固体上。这种分析可以使用abaqus中的Analytical Field实现。 1 例子 1.1 结构 一个100*100mm的面,面的载荷分布函数为p=(x2+y2)0.5/((20.5)*100) MPa,即(0, 0)的压强为0,(100, 100)的压强为1。 1.2 载荷 载荷函数:p=(x^2+y^2)^0.5/((2^0.5)*100) in exce.

shengyutou的博客 2万+

Stream流编程收集器

一、使用步骤 1.代码示例 代码如下: public class CollectorTest { public static void main(String[] args) { List<Student> students = Arrays.asList( new Student("小明", 10, Gender.MALE, Grade.ONE), new Student("小光", 9, Gender.M

madleep的博客 271

如何在SendWS实现WhatsApp批量群发设置管理?WhatsApp群发超链有什么好处?

WhatsApp群发顾名思义就是对WhatsApp上的用户好友进行群发消息,给他们群发想要发送的消息。及时不认识对方也可以对他进行群发超链。越来越多做跨境出海运营的工作者利用WhatsApp进行营销推广,因为他能做到低成本高回报,向客户发送消息曝光自己的品牌或产品,使得更多人了解,拓展新客户,提高成交率。

SendWS-WS云控群控拓客聊天翻译 1170

【Java没基础】函数式编程——Stream API 中的收集器

前言这是 Java 8 函数式编程系列的第二篇blog。在上篇,我们对 Java 8 的语法糖 Lambda 表达式以及部分 Stream API 进行了基本的学习,为了便于理解,我们写了一些简单的 Demo。详情请查看上一篇blog:【Java没基础】JDK1.8 中的 Lambda 表达式与 Stream API。 在今天的这篇blog中,我们来总结学习一下 Stream API 中更高级的应

一步一个脚印 459

专项1.CCS代码补全与快捷键优化全攻略

本文全面解析CCS开发环境的代码补全功能与快捷键优化技巧,包括内容辅助触发机制、快捷键自定义配置、编码效率提升方法等实用内容。通过详细步骤指导开发者优化CCS配置,实现高效的代码自动补全和个性化快捷键设置,显著提升嵌入式开发效率。

kotlin6android的博客 224

SAP 系统里生成 PDF 的几条主干路径:从 Spool 转换到 Adobe 原生渲染,再到 BTP 云服务

本文系统梳理了SAP生态中PDF生成的多种技术方案,包括Spool转换、OTF转换、Smart Forms/Adobe Forms原生生成以及云端服务等不同路径。文章通过实际案例和代码示例,详细分析了各方案的适用场景、技术要点和工程实践建议,特别强调了多语言支持、字体处理、性能优化等关键因素。针对不同业务需求,提供了从简单导出到复杂交互式PDF的完整解决方案框架,为SAP环境下的PDF处理提供了实用指南。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 289

《Java函数式编程实战》学习总结 第5章 高级集合类和收集器

摘要 本章介绍了Java 8中流操作的高级特性,重点讲解了方法引用、元素顺序和收集器的使用。方法引用可以简化Lambda表达式写法(如Artist::getName)。有序集合生成的流会保持元素顺序。收集器(Collectors)提供了多种数据处理方式:将流转换为集合(toList/toSet/toCollection);数值计算(maxBy/averagingInt);数据分组(partitioningBy/groupingBy);字符串拼接(joining);以及收集器组合使用(如分组+计数/分组+字段

七月的夏天博客 946

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Java8函数式编程之收集器

收集器 收集器是一种通用的、从流生成复杂值的结构。可以使用它从流中生成List、Set、Map等集合。 收集器都是在流的collect方法中调用,并且都在 Collectors类中。 java 的标准类库提供了很多有用的收集器,当然了,也可以自己自定义(这个对于使用者的要求很高)。 下面提供一个代码,用于测试接下里要说的收集器: 提供了一个简单的测试数据 学号 姓名 性别 语文 数学 英语 物...

qq_40734247的博客 1318

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Java8函数式编程2-类库、高级集合类和收集器

一、类库1、基本类型Java的泛型是是基于对泛型参数类型的擦除,只有装箱类型才能作为泛型参数,然而,由于装箱类型是对象,所以在内存中占据更大的空间,比如int只要4个字节,而Integer确需要16个字节。 将基本类型转换为装箱类型称为装箱,反之成为拆箱,两者都需要额外的计算开销。为了减小这些性能开销, Stream 类的某些方法对基本类型和装箱类型做了区分。

cuiods的博客 836

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

java中函数是什么_[一] java8 函数式编程入门 什么是函数式编程 函数接口概念 流和收集器基本概念...

本文是针对于java8引入函数式编程概念以及stream流相关的一些简单介绍什么是函数式编程?java程序员第一反应可能会理解成类的成员方法一类的东西此处并不是这个含义,更接近是数学上的函数看一下百度百科中关于函数的说明函数的定义:给定一个数集A,假设其中的元素为x。现对A中的元素x施加对应法则f,记作f(x),得到另一数集B。假设B中的元素为y。则y与x之间的等量关系可以用y=f(x)表示。我们...

weixin_31036949的博客 170

[一] java8 函数式编程入门 什么是函数式编程 函数接口概念 流和收集器基本概念...

  本文是针对于java8引入函数式编程概念以及stream流相关的一些简单介绍 什么是函数式编程?   java程序员第一反应可能会理解成类的成员方法一类的东西 此处并不是这个含义,更接近是数学上的函数 看一下百度百科中关于函数的说明 函数的定义: 给定一个数集A,假设其中的元素为x。 现对A中的元素x施加对应法则f,记作f(x),得到另一数集B。...

weixin_34216196的博客 145

[一] java8 函数式编程入门 什么是函数式编程 函数接口概念 流和收集器基本概念

  本文是针对于java8引入函数式编程概念以及stream流相关的一些简单介绍 什么是函数式编程?   java程序员第一反应可能会理解成类的成员方法一类的东西 此处并不是这个含义,更接近是数学上的函数 看一下百度百科中关于函数的说明 函数的定义: 给定一个数集A,假设其中的元素为x。 现对A中的元素x施加对应法则f,记作f(x),得到另一数集B。假设B中的元素为y。 则y与x之...

ahilll的博客 194

函数式编程 高级集合类和收集器

方法引用artist -> artist.getName()可以被以下代码替换Artist::getName标准语法为Classname::methodName构造函数也支持Artist::new String[]::new收集器一种通用的、从流生成复杂值的结构。只要将它传给collect 方法,所有 的流就都可以使用它了。1.转换成其他集合 toList,toSet 和toCollections

Heqianqian的博客 620

Java8 函数式编程 笔记-收集器基本用法

   参考并建议阅读《Java8函数式编程》 /《Java8 实战》

YF067的博客 509
上一篇: 函数式编程-基础操作符
下一篇: 函数式编程-聚合计算
James_JR10
博客等级 码龄9年 20粉丝 56原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值