Collectors常见操作

本文详细介绍了Java中的Collector接口及其五个核心参数:supplier、accumulator、combiner、finisher和characteristics。同时,通过示例展示了Collectors工具类的常用方法,包括toCollection、toList、toSet、joining和mapping,帮助读者更好地理解和运用这些方法来处理Java流数据。
摘要由CSDN通过智能技术生成

1.Collector主要包含五个参数的意义

public interface Collector<T, A, R> {
    // supplier参数用于生成结果容器,容器类型为A
    Supplier<A> supplier();
    // accumulator用于消费元素,也就是归纳元素,这里的T就是元素,它会将流中的元素一个一个与结果容器A发生操作
    BiConsumer<A, T> accumulator();
    // combiner用于两个两个合并并行执行的线程的执行结果,将其合并为一个最终结果A
    BinaryOperator<A> combiner();
    // finisher用于将之前整合完的结果R转换成为A
    Function<A, R> finisher();
    // characteristics表示当前Collector的特征值,这是个不可变Set
    Set<Characteristics> characteristics();
}

2. Collectors常用

2.1:toCollection:将流中的元素全部放置到一个集合中返回,这里使用Collection,泛指多种集合

public class CollectorsTest {
    public static void toCollectionTest(List<String> list) {
        List<String> ll = list.stream().collect(Collectors.toCollection(LinkedList::new));
    }
    public static void main(String[] args) {
        List<String> list = Arrays.asList("123","456","789","1101","212121121","asdaa","3e3e3e","2321eew");
        toCollectionTest(list);
    }
}

2.2:toList:将流中的元素放置到一个列表集合中去。这个列表默认为ArrayList。

public class CollectorsTest {
    public static void toListTest(List<String> list) {
        List<String> ll = list.stream().collect(Collectors.toList());
    }
    public static void main(String[] args) {
        List<String> list = Arrays.asList("123","456","789","1101","212121121","asdaa","3e3e3e","2321eew");
        toListTest(list);
    }
}

2.3:toSet:将流中的元素放置到一个无序集set中去。默认为HashSet。

public class CollectorsTest {
    public static void toSetTest(List<String> list) {
        Set<String> ss = list.stream().collect(Collectors.toSet());
    }
    public static void main(String[] args) {
        List<String> list = Arrays.asList("123","456","789","1101","212121121","asdaa","3e3e3e","2321eew");
        toSetTest(list);
    }
}

2.4:joining:joining的目的是将流中的元素全部以字符序列的方式连接到一起,可以指定连接符,甚至是结果的前后缀。 

public class CollectorsTest {
    public static void joiningTest(List<String> list){
        // 无参方法
        String s = list.stream().collect(Collectors.joining());
        System.out.println(s);
        // 指定连接符
        String ss = list.stream().collect(Collectors.joining("-"));
        System.out.println(ss);
        // 指定连接符和前后缀
        String sss = list.stream().collect(Collectors.joining("-","S","E"));
        System.out.println(sss);
    }
    public static void main(String[] args) {
        List<String> list = Arrays.asList("123","456","789","1101","212121121","asdaa","3e3e3e","2321eew");
        joiningTest(list);
    }
}

2.5:mapping:这个映射是首先对流中的每个元素进行映射,即类型转换,然后再将新元素以给定的Collector进行归纳。

public class CollectorsTest {
    public static void mapingTest(List<String> list){
        List<Integer> ll = list.stream().limit(5).collect(Collectors.mapping(Integer::valueOf,Collectors.toList()));
    }
    public static void main(String[] args) {
        List<String> list = Arrays.asList("123","456","789","1101","212121121","asdaa","3e3e3e","2321eew");
        mapingTest(list);
    }
}

文章地址:Java基础系列-Collector和Collectors - 简书

 

 

Collectors.groupingBy常见问题主要有以下几点: 1. 空指针异常:在使用Collectors.groupingBy方法时,如果分组的属性key值为null,就会抛出空指针异常。因此,在使用该方法时,需要确保分组的属性key值不为null,可以通过对数据进行预处理或使用Optional类进行空值处理来避免该异常的发生。 2. 分组结果的数据结构:Collectors.groupingBy方法返回的是一个Map<key, value>集合。其中,key表示分组的属性值,value表示该分组下的所有元素列表。通过这个数据结构,可以方便地对数据进行分组统计操作。 3. 分组函数的使用:Collectors.groupingBy方法接受一个Function参数,该参数定义了如何根据元素来进行分组。在函数中,可以使用元素的某个属性作为分组的依据,例如通过TestVo::getMonth来以月份为分组依据。 4. 自定义分组结果类型:除了使用默认的Map<key, value>集合作为分组结果,Collectors.groupingBy方法还可以通过传入不同的Collector参数来自定义分组结果类型。例如,可以使用Collectors.toList()来将分组的元素列表转换为List类型。 总结起来,Collectors.groupingBy是Java 8中用于分组统计的方法,它可以根据指定的属性将元素进行分组,并返回分组结果的集合。在使用该方法时,需要注意空指针异常的处理、分组结果的数据结构、分组函数的使用以及自定义分组结果类型的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值