JDK8特性深入学习笔记-收集器和比较器(5)

Collector

list.stream().map(i -> i * 2).collect(Collectors.toList);

            
        
        实现自定义收集器,必须override上面这5个方法:
        
        自定义收集器实现
        --------
        
        源码实现上应该是当comparingInt的返回结果为0时,才会继续调用thenComparing
        
        先根据name排序,如果name相等,则根据分数排序。
        
        thenCoparing可以理解为次级排序
        
        ### thenComparing
        
        默认比较器为升序排序,如果调用reversed,则返回的为倒序排序
        
        ### reversed
        
        Comparator是一个函数式接口,只有一个抽象方法`int compare(T o1, T o2);`,其余提供了很多默认方法。
        
        *   返回-1,则表示o1比o2小。
            
        *   返回 0,则表示o1和o2相等
            
        *   返回1,则表示o1比o2大
            
        
        Comparator是一个比较器,从JDK1.2时候开始提供。其中最重要的方法应该是`int compare(T o1, T o2);`方法。
        
        Comparator
        ----------
        
        Collectors是一个收集器工厂,为开发者提供一些常用的收集器和收集器方法。Collectors的收集器是私有的,所以无法直接实例化这个工厂。
        
        `Collectors`是`Collector`接口的官方唯一实现类。`Collecotrs`维护了一个CollectorImpl的内部类
        
        Collectors
        ----------
        
        *   `CONCURRENT`:表示这个收集器是可以并发的。
            
            *   这里的并发和parallelStream不同,parallStream是通过创建多个结果容器,再通过combiner合并到一起。
                
            *   而这个Concurrent表示,同一个结果容器支持多个线程同时调用。(这个容器需要线程安全的)
                
        *   `UNORDERED`:收集操作并不保证与输入元素顺序一致。
            
        *   `IDENTITY_FINISH`:如果中间的结果容器类型就是返回容器的类型,这时候才可以配置,finsher函数会直接将结果类型转化为传入的参数类型
            
        
        #### Characteristics

你可能感兴趣的:(java,jdk8,lambda,stream,function)