JDK8新特性
函数式接口://只有一个抽象方法可以包含其他方法
修饰符 interface 接口名称{
public abstract 返回值类型 方法名称(可选参数信息);
}//抽象方法只能有一个,其它方法可以包含体现与lambda使用
//比匿名内部类快
@FunctionalInterface:是否是一个函数式接口
使用:()->{};
先写好一个函数式接口,然后再用lambda表达式来操作
lambda来实现接口;
常用的函数式接口:
java.util.function.Supplier<T>;//生产行接口
T get();
java.util.function.Consumer<T>;
void accept();
默认
andThen://把两个consumer接口组合到一起
对象.andThen(对象2).accept();//链接消费
java.util.function.Predicate<T>;//对数据进行判断
boolean test(T t);
默认方法:
and or negate取反
java.util.function.Function<T,R>;//t和r为数据类型
R apply(T t);//t类型转化为r
andThen();//俩个组合
Stream流://针对与集合
管道流:只能使用一次,第二个流生成的时候第一个流已经关闭了
list.stream()
.filter()//过滤
.filter()
.forEach();
filter();//过滤
map()//
skip()//
coemt()//
获取流:
1.Collection通过stream获取//单列集合
default Stream str();
list.stream();//转化为流
set.stream();
2.Stream接口的静态方法
Stream.of();//将数组转化为流
4.延迟方法:放回是不是注解的本身数据类型
filter://将一个流转化为另外一个流
stream.filter((string name)->{return name.startsWith(“张”);})
map();//Fonctiom接口
stream.map((string s)->{return integer.parsrInt(s);})
limit()😕/取前几个
limit(3);//返回前三个
skip();//跳过前几个
skip(4);//跳过前四个
5.终结方法:
forEach();//方法
void forEach(Consumer<? super T>action)
count();//size
long类型
组合方法:
静态方法:
concat()
static <T> Stream<T> concat (Stream<? exends T> a,stream <? exends T>)
stream.concat(ste1,str2);
方法引用://::
lambda简化:
前提是对象和方法都存在
对象::方法