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);

  

  

 

  

posted @ 2023-12-23 13:40  郎小乐  阅读(4)  评论(0)    收藏  举报