Java8新特性
1、Lambda表达式
语法: 由三部分组成 ()->{System:out:print("hello ")}
第一部分 (param1 param2 param3)
第二部分 ->
第三部分 执行体 {}
案例
executorService.execute(new Runnable(){
@Override
public void run() {
System.out.println("");
}
});
executorService.execute(()->{System.out.println("");});
2、函数式接口,什么是函数式接口,
一、如果一个接口只有一个抽象方法那这个接口就是一个函数式接口,
二、如果一个接口如果增加了 @functionaiInterface注解,那么编译器就会按照函数式接口来要求这个接口,
三、如果某个接口只有一个抽象方法,但我们并没有给该接口声明@functionaiInterface,该接口还是函数式接口, 注意:如何某个接口方法是重写了Object方法则不会认为是函数式接口
这是java8之后的重要概念,从java8之后接口里不止有抽象方法,还能有默认具体实现的方法,如果是满足函数式接口则可以使用Lambda表达式,Runnable就是函数式接口
@FunctionalInterface
public interface Consumer{
default void a(){ System.out.println(""); }
public void b();
}

3、动手案例,我们创建可一个AA接口 并且里面声明了一个抽象函数aa,并且作为Bb类的bb方法参数,然后我们调用Bb类bb方法的参数 传入lambda表示式
4、stream函数, Stream...xxx...yyy...zzz 每次执行函数都返回当前对象,最终执行下来返回一个串型流, 集合+lambda表达式+流 这三个不可分割,
接下来 我们遍历 list集合 这里使用了两个函数
函数1 map函数,map函数是用来映射,把当前对象映射到目标对象的,
函数2是foreach 遍历
List list=new ArrayList();
list.add("jacklang");
list.add("tomcat");
list.add("jiehan");
list.add("dageg");
list.add("zhangsan");
list.stream().map(item->"把当前对象映射到目前对象").
forEach(param->{System.out.println(param);});
打印结果

5、Stream流,函数式链试风格编程,流操作包括三部分构成,流操作分为两部分,分为
第一部分 源(数据来源) 第二部分(零个或多个中间操作) 第三部分(终止操作),
操作1 惰性求值 操作2 及早求值
创建流的三种方式
//创建流第一种
Stream stream1=Stream.of("hello","world","hell world");
//创建流第二种
String[] array=new String[]{"hello","world"};
Stream<String> stream2 = Stream.of(array);
//创建流第三种
List<String> strings = Arrays.asList(args);
Stream<String> stream3 = strings.stream();
filter函数,这个是过滤一些条件保留那些满足条件的,并且传入的是正则表达式
//测试filter函数 这个是过滤一些条件保留那些满足条件的,并且传入的是正则表达式
stream1.filter(str->{
return str.equals("hello")||str.equals("world");
}).forEach( pr->System.out.println(pr));
//返回集合
List<String> arrs = (List<String>) stream1.filter(str -> {
return str.equals("hello") || str.equals("world");
}).collect(Collectors.toList());
for (String i: arrs){
System.out.println(i);
}
map 映射,将某个值映射成新的值
stream1.map((pa)->{
if(pa.equals("world")){
pa="langjunnan";
}
return pa;
}).forEach((e)->System.out.println(e));
mapToInt函数
// 将字符串的长度映射为一个IntStream
IntStream lengthsStream = Arrays.stream(words)
.mapToInt(String::length);

浙公网安备 33010602011771号