收集器Collectors

package com.ant.jdk8.chap06;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class GroupingTransaction {
    public static void main(String[] args) {
        List<Transaction> transactions = Arrays.asList(
                new Transaction(Currency.EUR, 1500.0),
                new Transaction(Currency.USD, 2300.0),
                new Transaction(Currency.GBP, 9900.0),
                new Transaction(Currency.EUR, 1100.0),
                new Transaction(Currency.JPY, 7800.0),
                new Transaction(Currency.CHF, 6700.0),
                new Transaction(Currency.EUR, 5600.0),
                new Transaction(Currency.USD, 4500.0),
                new Transaction(Currency.CHF, 3400.0),
                new Transaction(Currency.GBP, 3200.0),
                new Transaction(Currency.USD, 4600.0),
                new Transaction(Currency.JPY, 5700.0),
                new Transaction(Currency.EUR, 6800.0) );
        transactions.stream()
                .collect(Collectors.groupingBy(Transaction::getCurrency))
                .forEach((c,list)-> System.out.println(c+":"+list));
    }
}

收集器Collectors主要提供了三大功能:

1.将流元素归约和汇总为一个值

2.元素分组

3.元素分区

转载于:https://www.cnblogs.com/i-hard-working/p/9588092.html

### 关于 Collector 收集器 Collector 是 Java Stream API 中的一个接口,用于定义如何将流中的元素累积到汇总结果中。它通常与 `Collectors` 类一起使用,后者提供了许多静态方法来创建常见的收集操作。 #### 基本概念 Collector 接口的主要作用是将流中的数据转换成其他形式的结果,比如列表、集合、字符串或者统计数据摘要等[^1]。其核心在于通过一系列的操作(如积累、合并)最终生成目标结构的数据。 #### 主要实现类 Collectors 的功能描述 - **toList() 和 toSet():** 将流中的项目分别收集至 List 或 Set 当中。 ```java List<String> list = stream.collect(Collectors.toList()); Set<String> set = stream.collect(Collectors.toSet()); ``` - **joining():** 连接流中的字符序列形成单一字符串。 ```java String joined = stream.collect(Collectors.joining(", ")); ``` - **groupingBy:** 按照指定分类函数对输入项分组并返回 Map 结构。 ```java Map<Status, List<Employee>> groupedByStatus = employees.stream().collect(Collectors.groupingBy(Employee::getStatus)); ``` - **summarizingInt/Long/Double:** 提供数值型字段统计信息,包括最大值、最小值、平均数以及总数。 ```java IntSummaryStatistics stats = numbers.stream() .mapToInt(Integer::intValue) .summaryStatistics(); ``` 以上列举了一些常用的 collectors 方法及其应用场景[^2]。 #### 自定义 Collector 示例 当内置的 collector 不满足需求时,可以自定义一个 Collector 来完成特定的任务。下面展示了一个简单的例子,演示如何构建自己的 average 计算逻辑: ```java public static <T> Collector<T, ?, Double> averaging( ToDoubleFunction<? super T> mapper) { return Collector.of( () -> new double[]{0d, 0}, (acc, elem) -> { acc[0] += mapper.applyAsDouble(elem); acc[1]++; }, (left, right) -> { left[0] += right[0]; left[1] += right[1]; return left; }, acc -> acc[0]/acc[1]); } ``` 此代码片段展示了如何创建一个新的 collector 实现计算平均值的功能[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值