一:方法引用
方法引用是java8中引入的新的概念--方法参数化的一种应用.即可以把方法当成参数进行传递.注意:方法中请慎重勿使用共享资源
例子:
//以往写法
File[] listFiles = new File(".").listFiles(new FileFilter() {
public boolean accept(File file) {
return file.isHidden();
}
});
//java8写法
File[] listFiles = new File(".").listFiles(File::isHidden);
正如一些编程大牛说的:这样的代码读起来才有诗意!---------获取"."目录对象获取文件并根据是这个文件是否是隐藏进行筛选.
二,lambda表达式
lamdba表达式也是java8中对函数作为值得一种完美体现.
下面用一个例子去初窥lambda的神奇之处
试想一下,我们有一个apple类.有颜色,重量的属性.现在我们有一个装满很多不同apple的List集合.
试问如何筛选出某些颜色或者重量范围之内的苹果.也许你以前写过很多次这样无聊的code,下面看看java8是如何realize
//筛选出红色和蓝色苹果
List<Apple> filterApples1 = apple1.filterApples(apples,(Apple a)->"red".equals(a.getColor())||"bule".equals(a.getColor()));
//筛选出符合重量的苹果
List<Apple> filterApples2 = apple1.filterApples(apples,(Apple a)->a.getWeigt()>1);
apple类
class Apple{
public int weigt;
public String color;
public int getWerigh(){
return weigt;
}
public String getColor(){
return color;
}
public List<Apple> filterApples(List<Apple> apples,Predicate<Apple> p){
List<Apple> result=new ArrayList<Apple>();
for (Apple apple : apples) {
if(p.test(apple)){
result.add(apple);
}
}
return result;
}
public int getWeigt() {
return weigt;
}
public String toString() {
return "Apple [weigt=" + weigt + ", color=" + color + "]";
}
}
其中predicate是"谓语".一个类似函数的恭喜,接收一个值返回true后者false.
三,stream流API
为了高效制造和处理java中的集合类,java8引入stream类---为我们提供了免费的并行操作集合API
例子:
apples.stream().filter((Apple a)->"red".equals(a.getColor())).collect(Collectors.toList());
这段代码的意思 挑选出红颜色的苹果.如果用传统的collections工具类来完成的话.也是可以的,但是满足不了我们高效的要求四,默认方法
我们刚接触java的stream一定会很奇怪,collection接口和list接口等等集合类中凭空出现一个stream方法,而我们基于这些接口的实现类并没有因为没有实现这个方法而报错
这是为什么?难道接口的方法可以不用实现了么?
NO! 一个新的"bug补丁"出现了,默认方法.
public interface DefaultMethod {
default void say(){
System.out.println("我们没必要实现这个方法");
}
void eat();
}
class DefaultMethodTest implements DefaultMethod {
public void eat() {
System.out.println("我们必须实现这个方法");
}
}
好啦,java8最为主要的几个要点已经大概给大家有所展示.休息一下,我们来详细了解下
java8的精彩之处