第二十三讲 JDK8的foreach与Consumer接口、四大核心函数式接口、Stream接口、队列与栈

╄→гoц情女王★ 提交于 2019-12-09 05:27:47

导读

JDK8的foreach方法是可以直接遍历集合的,是一个新特性。

四大核心函数式接口:熟悉并会使用来解决实际开发中的项目问题。

Stream接口:处理业务接口。

队列与栈:必须要懂,因为包含了很多内存分配和处理的知识点。


一、JDK8的foreach循环:

int i = 0;// 自变量

// 创建一个集合来保存自变量数据
List<Integer> list = new ArrayList<>();

// 把生成的数据添加到集合中——
list.add(++i);
list.add(++i);
list.add(++i);
list.add(++i);

// 采用JDK8的foreach增强方法来遍历——
list.forEach(cc -> System.out.println(cc));
list.forEach(System.err :: println);
list.add(++i); 

// 把数组转换为集合并输出——
Integer[] ints = new Integer[]{};
ints = list.toArray(ints);
System.out.println(Arrays.asList(ints));

小结:


新线程 —— 根据打印顺序显示,forEach 方法开启了一个新的线程

线程异步安全 —— 因为交替打印,所以线程为异步;因为在集合新增了一个元素后,返回进入forEach循环继续执行打印并没有将新元素增加上,
   

也就是说,在这个线程开启后,外界操作对其中的集合将没有任何影响,所以它是安全的。

Lambda表达式 —— 该forEach方法其实是一个Lambda表达式,而Lambda表达式本质上是一个匿名方法,所以这里是一个值传递,即拷贝了一份原来的值,所以外界操作不会再影响它的值,所以“线程安全”。更多关于Lambda表达式的知识,可以看看这位大神的文章,写的很不错。

注意:Java8 引入了default方法修饰符,使得接口中可以有实现的方法。



二、JDK8的Consumer接口分析

概述: java8中首次出现Consumer接口,用于接收一个输入参数并处理,不返回任何值。

这个接口含有两个方法,accept()方法用于处理输入的参数
    /**
     * Performs this operation on the given argument.
     *
     * @param t the input argument
     */
    void accept(T t);
     andThen()方法用于链式处理


    default Consumer<T> andThen(Consumer<? super T> after) {
        Objects.requireNonNull(after);
        return (T t) -> { accept(t); after.accept(t); };
    }
   

该方法返回一个Consumer对象C,调用者Consumer对象设为A,输入参数Consumer对象设为B,C的accept()方法执行体是A.accept() + B.accept()


三、四大函数式接口

这里有一篇文章比较精简,大家可以去作者的博客里面看看——

【http://blog.csdn.net/pzxwhc/article/details/48314039】

四、Stream接口中有一些详细的说明,我可以推荐一篇博文大家看。

【网址:http://blog.csdn.net/u014082714/article/details/51423756】

帮助大家找比较好的文章,来迅速学习并运用到自己的项目开发中。


五、队列与栈

【网址:http://blog.csdn.net/hguisu/article/details/7674195】

非常重要,必须要懂得其原理。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!