导读
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】
非常重要,必须要懂得其原理。
来源:CSDN
作者:宁叔
链接:https://blog.csdn.net/u013003505/article/details/78752020