一.接口的默认方法 (1)在接口中添加一个非抽象方法只需要使用一个default 关键字就可以 (2)我们把非抽象方法理解成一个扩展方法,
二.函数式编程 1.什么是函数式编程 ?一切皆函数 2.将处理问题的粒度从类变成函数,从而可以更好的满足系统对重用性,和扩展性的支持 3.可以将函数作为参数传递给另一个函数 4.可以简化代码的操作 5.开发速度快,易于并发编程,不需要考虑死锁 6.耗费cpu 三.Lambda表达式 (1)lambda表达式是一种新的语法形式,简化了代码的开发操作,由编译器转化为常规的代码 (2)Lambda表达式可以理解成函数式编程的体现方式 (3)lambda表达式通过表达式代替功能接口,就类似于匿名方法 (4)语法 ->称为lambda表达式的操作符 结构: (parameters)参数列表 -> (expression|{statement})表达式
四,使用lambda表达式对数组进行排序 String [] str = {"v","s","e"}; 1.第一种方式 Arrays.sort(str,(x,y) -> x.compareTo(y)); 2.第二种方式 Arrays.sort(str,String::compareTo);五.使用lambda表达式遍历集合 List list1 = new ArrayList(); list1.add(“kadaj”); list1.add(“dawef”); list1.add(“daegg”);
1.正常lambda表达式 list1.forEach((name)->System.out.println(name)); 2.第二种方式 :双冒号表达式 list1.forEach(System.out::println);六.查询集合中带有某个字符串的元素 例: list.forEach(item->{ if(!“tina”.equals(item)){ System.out.println(item); } });
七.Lambda表达式对集合进行排序 list1.sort((x,y)->x.compareTo(y));
八.lambda表达式的应用场景 –以内部迭代取代外部迭代 外部迭代:描述怎么干,只能顺序处理List集合中的数据 内部迭代:描述干什么,不一定要顺序处理List集合中的循环,使用forEach –以流水线的方式处理数据:使用Steam stream对集合进行包装,通常和lambda表达式一起使用 支持很多操作: (1)filter(过滤):list.stream().filter(p -> p.getAge()>21).forEach(p -> System.out.println(p.getAge())); (2)limit(过滤): list.stream().limit(3) //获取前三个元素 (2)sorted(排序):list.stream().sorted((p1,p2)->p1.compareTo(p2)) (3)max: list.stream().max((p1,p2)->p1.getAge() > p2.getAge()) //获取最大值 (4)min: Person p = list.stream.min((p1,p2)-> p1.getAge() < p2.getAge()).get(); //获取拥有最小年龄的对象 (5)collect: List evens = list.stream().filter(i -> i%2 ==0).collect(Collectors.toList) //返回符合条件的数据并封装成集合 (6)sum: (7)map: