collectors排序_Java-Collectors常用的20个方法

相思相见知何日?此时此夜难为情。

返回List集合: toList()

用于将元素累积到List集合中。它将创建一个新List集合(不会更改当前集合)。List integers = Arrays.asList(1,2,3,4,5,6,6);

integers.stream().map(x -> x*x).collect(Collectors.toList());// output: [1,4,9,16,25,36,36]

返回Set集合: toSet()

用于将元素累积到Set集合中。它会删除重复元素。List integers = Arrays.asList(1,2,3,4,5,6,6);

integers.stream().map(x -> x*x).collect(Collectors.toSet());// output: [1,4,9,16,25,36]

返回指定的集合: toCollection()

可以将元素雷击到指定的集合中。List integers = Arrays.asList(1,2,3,4,5,6,6);

integers

.stream()

.filter(x -> x >2)

.collect(Collectors.toCollection(LinkedList::new));// output: [3,4,5,6,6]

计算元素数量: Counting()

用于返回计算集合中存在的元素个数。List integers = Arrays.asList(1,2,3,4,5,6,6);

Long collect = integers

.stream()

.filter(x -> x <4)

.collect(Collectors.counting());// output: 3

求最小值: minBy()

用于返回列表中存在的最小值。List integers = Arrays.asList(1,2,3,4,5,6,6);

List strings = Arrays.asList("alpha","beta","gamma");

integers

.stream()

.collect(Collectors.minBy(Comparator.naturalOrder()))

.get();// output: 1strings

.stream()

.collect(Collectors.minBy(Comparator.naturalOrder()))

.get();// output: alpha

按照整数排序返回1,按照字符串排序返回alpha

可以使用reverseOrder()方法反转顺序。List integers = Arrays.asList(1,2,3,4,5,6,6);

List strings = Arrays.asList("alpha","beta","gamma");

integers

.stream()

.collect(Collectors.minBy(Comparator.reverseOrder()))

.get();// output: 6strings

.stream()

.collect(Collectors.minBy(Comparator.reverseOrder()))

.get();// output: gamma

同时可以自定义的对象定制比较器。

求最大值: maxBy()

和最小值方法类似,使用maxBy()方法来获得最大值。List strings = Arrays.asList("alpha","beta","gamma");

strings

.stream()

.collect(Collectors.maxBy(Comparator.naturalOrder()))

.get();// output: gamma

分区列表:partitioningBy()

用于将一个集合划分为2个集合并将其添加到映射中,1个满足给定条件,另一个不满足,例如从集合中分离奇数。因此它将在map中生成2条数据,1个以true为key,奇数为值,第2个以false为key,以偶数为值。List strings = Arrays.asList("a","alpha","beta","gamma");

Map> collect1 = strings

.stream()

.collect(Collectors.partitioningBy(x -> x.length() > 2));// output: {false=[a], true=[alpha, beta, gamma]}

这里我们将长度大于2的字符串与其余字符串分开。

返回不可修改的List集合:toUnmodifiableList()

用于创建只读List集合。任何试图对此不可修改List集合进行更改的尝试都将导致UnsupportedOperationException。List strings = Arrays.asList("alpha","beta","gamma");

List collect2 = strings

.stream()

.collect(Collectors.toUnmodifiableList());// output: ["alpha","beta","gamma"]

返回不可修改的Set集合:toUnmodifiableSet()

用于创建只读Set集合。任何试图对此不可修改Set集合进行更改的尝试都将导致UnsupportedOperationException。它会删除重复元素。List strings = Arrays.asList("alpha","beta","gamma","alpha");

Set readOnlySet = strings

.stream()

.sorted()

.collect(Collectors.toUnmodifiableSet());// output: ["alpha","beta","gamma"]

连接元素:Joining()

用指定的字符串链接集合内的元素。List strings = Arrays.asList("alpha","beta","gamma");

String collect3 = strings

.stream()

.distinct()

.collect(Collectors.joining(","));// output: alpha,beta,gammaString collect4 = strings

.stream()

.map(s -> s.toString())

.collect(Collectors.joining(",","[","]"));// output: [alpha,beta,gamma]

Long类型集合的平均值:averagingLong()

查找Long类型集合的平均值。

注意:返回的是Double类型而不是 Long类型List longValues = Arrays.asList(100l,200l,300l);

Double d1 = longValues

.stream()

.collect(Collectors.averagingLong(x -> x * 2));// output: 400.0

Integer类型集合的平均值:averagingInt()

查找Integer类型集合的平均值。

注意:返回的是Double类型而不是 int类型List integers = Arrays.asList(1,2,3,4,5,6,6);

Double d2 = integers

.stream()

.collect(Collectors.averagingInt(x -> x*2));// output: 7.714285714285714

Double类型集合的平均值:averagingDouble()

查找Double类型集合的平均值。List doubles = Arrays.asList(1.1,2.0,3.0,4.0,5.0,5.0);

Double d3 = doubles

.stream()

.collect(Collectors.averagingDouble(x -> x));// output: 3.35

创建Map:toMap()

根据集合的值创建Map。List strings = Arrays.asList("alpha","beta","gamma");

Map map = strings

.stream()

.collect(Collectors

.toMap(Function.identity(),String::length));// output: {alpha=5, beta=4, gamma=5}

创建了一个Map,其中集合值作为key,在集合中的出现次数作为值。

在创建map时处理列表的重复项

集合中可以包含重复的值,因此,如果想从列表中创建一个Map,并希望使用集合值作为map的key,那么需要解析重复的key。由于map只包含唯一的key,可以使用比较器来实现这一点。List strings = Arrays.asList("alpha","beta","gamma","beta");

Map map = strings

.stream()

.collect(Collectors

.toMap(Function.identity(),String::length,(i1,i2) -> i1));// output: {alpha=5, gamma=5, beta=4}

Function.identity()指向集合中的值,i1和i2是重复键的值。可以只保留一个值,这里选择i1,也可以用这两个值来计算任何东西,比如把它们相加,比较和选择较大的那个,等等。

整数求和:summingInt ()

查找集合中所有整数的和。它并不总是初始集合的和,就像我们在下面的例子中使用的我们使用的是字符串列表,首先我们把每个字符串转换成一个等于它的长度的整数,然后把所有的长度相加。List strings = Arrays.asList("alpha","beta","gamma");

Integer collect4 = strings

.stream()

.collect(Collectors.summingInt(String::length));// output: 18

或直接集合值和List integers = Arrays.asList(1,2,3,4,5,6,6);

Integer sum = integers

.stream()

.collect(Collectors.summingInt(x -> x));// output: 27

double求和:summingDouble ()

类似于整数求和,只是它用于双精度值List  doubleValues = Arrays.asList(1.1,2.0,3.0,4.0,5.0,5.0);

Double sum = doubleValues

.stream()

.collect(Collectors.summingDouble(x ->x));// output: 20.1

Long求和:summingLong ()

与前两个相同,用于添加long值或int值。可以对int值使用summinglong(),但不能对long值使用summingInt()。List longValues = Arrays.asList(100l,200l,300l);

Long sum = longValues

.stream()

.collect(Collectors.summingLong(x ->x));// output: 600

Long求和:summingLong ()

与前两个相同,用于添加long值或int值。可以对int值使用summinglong(),但不能对long值使用summingInt()。List longValues = Arrays.asList(100l,200l,300l);

Long sum = longValues

.stream()

.collect(Collectors.summingLong(x ->x));// output: 600

汇总整数:summarizingInt ()

它给出集合中出现的值的所有主要算术运算值,如所有值的平均值、最小值、最大值、所有值的计数和总和。List integers = Arrays.asList(1,2,3,4,5,6,6);

IntSummaryStatistics stats = integers

.stream()

.collect(Collectors.summarizingInt(x -> x ));//output: IntSummaryStatistics{count=7, sum=27, min=1, average=3.857143, max=6}

可以使用get方法提取不同的值,如:stats.getAverage();   // 3.857143stats.getMax();       // 6stats.getMin();       // 1stats.getCount();     // 7stats.getSum();       // 27

分组函数:GroupingBy ()

GroupingBy()是一种高级方法,用于从任何其他集合创建Map。List strings = Arrays.asList("alpha","beta","gamma");

Map> collect = strings

.stream()

.collect(Collectors.groupingBy(String::length));// output: {4=[beta, beta], 5=[alpha, gamma]}

它将字符串长度作为key,并将该长度的字符串列表作为value。List strings = Arrays.asList("alpha","beta","gamma");

Map> collect1 = strings

.stream()

.collect(Collectors.groupingBy(String::length,

Collectors.toCollection(LinkedList::new)));// output: {4=[beta, beta], 5=[alpha, gamma]}

这里指定了Map中需要的列表类型(Libkedlist)。

🙂🙂🙂微信公众号java干货

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值