Java8新特性(内置的核心函数式接口)
来源:互联网 发布:ubuntu ftp服务器 编辑:程序博客网 时间:2024/06/05 00:08
前言:
1.我们知道只要使用Lambda表达式,那么一定要有函数式接口的支持;但是如果我们没使用一个Lambda表达式都要自己创建一个接口,这样很造成很大的不便。于是java8的工程师们已经帮我们把常用的函数式接口都帮我们定义好,拿来直接使用即可。如果不能满足你的需求,那么这时你才需要自己定义函数式接口。下面是我们常用的函数式接口:
知识点一:消费性函数式接口
特点:
1.接受一个或者多个参数,没有返回值
典型函数式接口(常用):
1.Consumer<T> void accept(T t);//接受一个泛型类型参数无返回 2.BiConsumer<T, U> void accept(T t, U u);//接受两个泛型类型参数无返回 3.DoubleConsumer void accept(double value);//接收double类型,无返回 4.IntConsumer void accept(int value);//接收int类型,无返回 5.LongConsumer void accept(long value);//接收long类型,无返回 6.ObjDoubleConsumer<T> void accept(T t, double value);//接收两个参数,一个泛型,一个double 7.ObjIntConsumer<T> void accept(T t, int value);//接收两个参数,一个泛型,一个int 8.ObjLongConsumer<T> void accept(T t, long value);//接收两个参数,一个泛型,一个long
举例:这里使用Consumer举例,接收一个参数无返回值,其他的用法基本相同
//需求:消费给定的monkey,但是消费方式没有给定,需要具体消费的时候指定 @org.junit.Test public void test1(){ //消费100,洗澡 consumerMonkey(100,(m) -> System.out.println("洗澡花费了100元")); //消费200,吃饭 consumerMonkey(200,(m) -> System.out.println("洗澡花费了200元")); } /** * 消费monkey,但是没有指定出使用什么方式消费 * */ * public static void consumerMonkey(double money, Consumer<Double> policy){ policy.accept(money); }
知识点二:供给型函数式接口
特点:
1.没有参数(无参),提供返回值
典型函数式接口(常用):
1. Supplier<T> T get(); //无参,返回泛型2. BooleanSupplier boolean getAsBoolean(); //无参,返回boolean3. DoubleSupplier double getAsDouble(); //无参,返回double4. LongSupplier long getAsLong(); //无参,返回long
举例:以 Supplier 接收泛型类型为例,其他都基本一致
@org.junit.Test public void test2(){ // 返回给定的String类型 String s = get(() -> "Hello world !"); System.out.println(s); //打印hello world ! // 返回给定类型的 int 数据 int i = get(() -> 123); System.out.println(i); //打印123 } /** * 获取给定类型的对象,在调用的时候指定类型 * */ public static <T> T get(Supplier<T> supplier){ return supplier.get(); }
知识点三:函数型函数式接口
特点:
1.接收一个或者多个参数,有返回值
典型函数式接口(常用):
1. Function<T, R> R apply(T t); //接收一个泛型参数,返回一个泛型参数 2. BiFunction<T, U, R> R apply(T t, U u); //接收两个泛型参数,返回泛型参数 3. DoubleFunction<R> R apply(double value);//接收一个double类型,返回一个泛型 4. DoubleToIntFunction int applyAsInt(double value); 5. DoubleToLongFunction long applyAsLong(double value); 6. IntFunction<R> R apply(int value); 7. IntToDoubleFunction double applyAsDouble(int value); 8. IntToLongFunction long applyAsLong(int value); 9. LongFunction<R> R apply(long value); 10.LongToDoubleFunction double applyAsDouble(long value); 11.LongToIntFunction int applyAsInt(long value); 12.ToDoubleBiFunction<T, U> double applyAsDouble(T t, U u); 13.ToDoubleFunction<T> double applyAsDouble(T value); 14.ToIntBiFunction<T, U> int applyAsInt(T t, U u); 15.ToIntFunction<T> int applyAsInt(T value); 16.ToLongBiFunction<T, U> long applyAsLong(T t, U u); 17.ToLongFunction<T> long applyAsLong(T value);
举例:以 Function接收一个泛型类型,返回一个泛型类型为例,其他都基本一致
@org.junit.Test public void test3(){ //需求1:接收一个String,返回一个name等于给定String的Student对象 Student student = handleOperator("XiangYang", (t) -> new Student(t)); System.out.println(student); //打印:Student{name='XiangYang', age=0} //需求二:就收一个String,返回List,并且list中包含传入的String List list1 = handleOperator("XiangYang", (t) -> { List list = new ArrayList<>(); list.add(t); return list; }); System.out.println(list1); //打印:[XiangYang] }class Student{ private String name; private int age; public Student(String name, int age) { this.name = name; this.age = age; } public Student(String name) { this.name = name; } public Student(int age) { this.age = age; } public Student() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + '}'; }}
知识点四:断定性函数式接口
特点:
1.接收一个或者多个参数,返回一个boolean类型
常用的函数式接口:
1. Predicate<T> boolean test(T t);2. BiPredicate<T, U> boolean test(T t, U u); 3. DoublePredicate boolean test(double value);4. IntPredicate boolean test(int value);5. LongPredicate boolean test(long value);
举例:以 Predicate 为例
@org.junit.Test public void test4(){ //判断给定的整数是否大于50 boolean b = is(80, (n) -> n > 50); System.out.println(b); //打印:true } public static <T> boolean is(T t,Predicate<T> predicate){ return predicate.test(t); }
总结:
1.每一中类型都给出了泛型情况,可以传入任何类型;而对于常用的类型,都单独定义了接口;例如: int 、 long 、double
阅读全文
0 0
- Java8新特性(内置的核心函数式接口)
- Java8新特性_四大内置核心函数式接口
- Java8中内置的四大核心函数式接口
- Java8新特性函数式接口
- Java8 新特性 函数式接口
- JAVA8新特性之(函数式接口)
- java8的内置函数式接口总结
- Java8的四大核心函数式接口
- Java8的四大核心函数式接口
- java8内置函数式接口
- Java8内置函数式接口
- Java8 新特性之一---------Lambda表达式和函数式接口
- Java8新特性之 函数式接口FunctionalInterface详解
- Java8新特性Lambda表达式、函数式接口
- JAVA8新特性[第二季]-函数式接口
- Java8新特性之四函数式接口
- [Java]Java8新特性-lambda表达式/语法/函数式接口
- JAVA8新特性总结一(接口函数默认实现)
- stm32L011寄存器操作flash
- ES笔记
- MapReduce(Shuffer原理)
- 正则表达式贪婪与非贪婪模式
- SparkStreaming
- Java8新特性(内置的核心函数式接口)
- java多线程打印出“A12B34C56D78E910...”的简单理解
- 推荐一个下载中国城市统计年鉴的地址
- ABI vs API
- webpack 3.0+基础学习
- 村村通公路(Prim)
- 文件作为字典参数上传
- 微信jsSDK本地调试流程攻略(nodeJs实现获取access_token等信息)
- 原始断点续传