java_新特性未整理
时间:2019-08-23
本文章向大家介绍java_新特性未整理,主要包括java_新特性未整理使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
package FunctionalFormula;
public interface Test {
/**
* 函数式接口:
* 概念:
* 有且仅有一个抽象方法的接口
* 接口中何以包含其他方法(默认,静态,私有)
*
* 格式:
* interface 接口名称{
* public abstract 返回值类型 方法名称(可选参数信息);
* 其他非抽象方法内容
*
* }
* 注解:
* @FunctionalInterface(检测接口是否是一个函数式接口):
* 是:编译成功
* 否:编译失败(接口中没有抽象方法或抽象方法个数大于1)
* 使用:
* public static void show(接口名){
* 接口名.方法
* }
*/
//声明一个函数接口
/** 调用show方法,方法的参数是一个接口,所以可以传递接口中的实现类对象
* 调用show方法,方法的参数是一个接口,所以可以传递接口的匿名内部类
* 调用show方法,方法的参数是一个函数式接口,所以可以传递Lambda表达式show((函数参数)->{实现体})
* 简化Lambda表达式:
* show((参数)->如果只有一句则可以不写大括号)
* 函数式编程:
* Lambda的延迟执行:
* 有些场景代码执行后,结果不一定会被使用,从而造成性能浪费。而Lambda表达式是延迟执行的,这正好可以作为解决方案,提升性能
* 使用Lambda优化日志案例
* Lambda的特点:延迟加载
* Lambda使用前提:必须存在函数式接口
* 使用Lambda表达式作为参数传递,仅仅是把参数传递到showLog方法中
* 只有满足条件:
* 才会调用MessageBuilder中的方法
* 才会进行拼接
* 条件满足:MessageBuilder中的方法不会执行
*
* 常用的函数式接口:
* java.util.function.Supplier<T>
* get() 获取一个泛型参数指定的类型的对象数据
* Supplier<T>接口被称之为生产型接口,指定接口的泛型是什么类型,那么接口中的get方法就会生产什么类型的数据
* 求数组元素最大值
*
* java.util.Function.Consumer<T>:
* 消费型接口,泛型执行什么类型就可以使用accept方法消费什么类型的数据
* 默认方法:andThen:
* 如果一个方法的参数和返回值全是Consumer类型,消费的时候首先一个操作,然后一个操作,实现组合
* 需要两个Consumer接口,可以把两个接口组合到一起,在数据进行消费
* con1.andThen(con2).accept(s);谁在前谁先消费
*
* java.util.function.Predicate<T>接口
* 作用:某周数据类型的数据进行判断返回boolean值
* 接口中包含的抽象方法:
* boolean test(T t)对用来指定数据类型数据进行判断的方法
* 接口中默认方法:
* and():表示并且关系,也可以用于连接两个判断条件
* or():表示或者关系,也可以用于连接两个判断条件
* negate():取反
*
* java.util.function.Function<T,R>
* 接口用来根据一个类型的数据得到另一个类型的数据,前者称为前置条件,后者称为后置条件
* 抽象方法:
* R apply(T t):根据类型T的参数获取类型R
* 的结果。
* 默认方法:
* andThen:用力组合操作
*
* Stream流:JDK1.8之后出现的
* java.util.stream.Stream<T>
* list.stream()
* .filter(Lambda表达式)
* .filter(Lambda表达式)
* .forEach(Lambda迭代)
* 获取流:
* 所有的Collection集合都可以通过stream默认方法获取流
* default Stream<E> stream()
* stream接口的静态方法of可以获取数组对应的流
* static<T> Stream<T> of(T...value)
* 参数是一个可变参数,可以传递数组
* 常用方法:
* 消费:forEach:
* 接受Consumer接口函数,会将每个流元素交给函数进行处理