13函数式编程&Stream流

13.1常用的函数式接口总结

 
接口名称方法名称抽象/默认 延迟/终结方法描述
Supplierget抽象终结供给型接口,无参有返回值,主要用于
Consumeraccept抽象终结消费型接口,有参数无返回值
 andThen默认延迟 
Functionapply抽象终结函数型接口,有参数有返回值
 andThen默认延迟 
 compose默认延迟 
Predicatetest抽象终结断言型接口,元芳你怎么看
 and默认延迟 
 or默认延迟 
 negate默认延迟 
notes:
        - 延迟方法:只是在拼接Lambda函数模型的方法,并不立即执行得到结果。
        - 终结方法:根据拼好的Lambda函数模型,立即执行得到结果值的方法。
 

13.2 Stream流

        13.2.1 获取流的三种方式

                
    public static void main(String[] args) {

        // Collection 集合
        Collection c = new ArrayList<String>();
        Stream stream1 = c.stream();
        System.out.println("stream1 = " + stream1);

        // List 集合
        ArrayList<String> list = new ArrayList<>();
        Stream<String> stream2 = list.stream();
        System.out.println("stream2 = " + stream2);

        // Set 集合
        HashSet<String> set = new HashSet<>();
        Stream<String> stream3 = set.stream();
        System.out.println("stream3 = " + stream3);
    }
 
 
 
17
 
 
 
 
 
1
    public static void main(String[] args) {
2
 
          
3
        // Collection 集合
4
        Collection c = new ArrayList<String>();
5
        Stream stream1 = c.stream();
6
        System.out.println("stream1 = " + stream1);
7
 
          
8
        // List 集合
9
        ArrayList<String> list = new ArrayList<>();
10
        Stream<String> stream2 = list.stream();
11
        System.out.println("stream2 = " + stream2);
12
 
          
13
        // Set 集合
14
        HashSet<String> set = new HashSet<>();
15
        Stream<String> stream3 = set.stream();
16
        System.out.println("stream3 = " + stream3);
17
    }
 
 
Map集合
    public static void main(String[] args) {

        // Map 集合
        HashMap<String, Integer> map = new HashMap<>();

        // 获取流
        // 1. keySet
        Stream<String> stream1 = map.keySet().stream();
        // 2. values
        Stream<Integer> stream2 = map.values().stream();
        // 3. entrySet
        Stream<Map.Entry<String, Integer>> stream3 = map.entrySet().stream();

        System.out.println("stream1 = " + stream1);
        System.out.println("stream2 = " + stream2);
        System.out.println("stream3 = " + stream3);
    }
 
 
 
17
 
 
 
 
 
1
    public static void main(String[] args) {
2
 
          
3
        // Map 集合
4
        HashMap<String, Integer> map = new HashMap<>();
5
 
          
6
        // 获取流
7
        // 1. keySet
8
        Stream<String> stream1 = map.keySet().stream();
9
        // 2. values
10
        Stream<Integer> stream2 = map.values().stream();
11
        // 3. entrySet
12
        Stream<Map.Entry<String, Integer>> stream3 = map.entrySet().stream();
13
 
          
14
        System.out.println("stream1 = " + stream1);
15
        System.out.println("stream2 = " + stream2);
16
        System.out.println("stream3 = " + stream3);
17
    }
 
 
 
 

        13.2.2 流的常用方法

                 - 终结方法:返回值类型不再是Stream接口自身类型的方法,因此不再支持类似StringBuilder那样的链式调用。本小节中,终结方法包括count和forEach方法。
               - 非终结方法:返回值类型仍然是Stream接口自身类型的方法,因此支持链式调用。(除了终结方法外,其余方法均为非终结方法。)
 
                终结方法:逐一处理:forEach,统计个数:count
                非终结方法:过滤:filter,取用前几个:limit,跳过前几个:skip,映射:map
               组合: 使用Stream接口的静态方法concat
方法名方法作用方法种类是否支持链式调用
count统计个数终结
forEach逐一处理终结
filter过滤函数拼接
limit取用前几个函数拼接
skip跳过前几个函数拼接
map映射函数拼接
concat组合函数拼接
 
                    并发流:
                    转换为并发流
                   1. Stream的父接口java.util.stream.BaseStream中定义了一个parallel方法:
                            2.在通过集合获取流时,也可以直接调用parallelStream方法来直接获取支持并发操作的流
                             default Stream<E> parallelStream() {...}
 
                               收集集合三种
                                收集到集合中
Stream流提供collect方法,其参数需要一个java.util.stream.Collector<T,A, R>接口对象来指定收集到哪种集合中。幸运的是,java.util.stream.Collectors类提供一些方法,可以作为Collector接口的实例:
- public static <T> Collector<T, ?, List<T>> toList():转换为List集合。
- public static <T> Collector<T, ?, Set<T>> toSet():转换为Set集合。
收集到数组中
Stream提供toArray方法来将结果放到一个数组中,由于泛型擦除的原因,返回值类型是Object[]的:
 
扩展:解决泛型数组问题
有了Lambda和方法引用之后,可以使用toArray方法的另一种重载形式传递一个IntFunction<A[]>的函数,继而从外面指定泛型参数。方法签名:
    <A> A[] toArray(IntFunction<A[]> generator);
有了它,上例代码中不再局限于Object[]结果,而可以得到String[]结果
 
 
 
 

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

 
 
 
 





转载于:https://www.cnblogs.com/zhengyuan/p/9377728.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值