首页 > 编程语言 >Java8新特性-函数式接口

Java8新特性-函数式接口

时间:2022-10-26 21:03:43浏览次数:42  
标签:Predicate return String 接口 Java8 static public 函数

一、函数式接口

1.1 简介

  • 首先的是一个接口
  • 接口内有且只有一个抽象方法
  • 为防止破坏函数式接口,最好是在接口上使用
  • @FunctionalInterface注解修饰

定义一个函数接口

package com.xxx;

@FunctionalInterface
public interface Inner3 {
    //只能有一个抽象方法
    void showInfo();

    default void show() {
    }
}

1.1.1 函数接口作为方法的参数
1.1.2 函数接口作为方法的返回值
1.1.3 jdk提供的函数型接口作为方法的参数

1.2 供给型接口-Supplier

方法名称 方法描述
T get() 得到一个结果
package com.xxx;

import java.util.function.Supplier;

public class SupplierTest {
    public static void main(String[] args) {
        String str = getStr(() -> {
            return "函数式接口Supplier".substring(0, 1);
        });

        System.out.println(str);
    }

    public static String getStr(Supplier<String> supplier){
        return supplier.get();
    }
}

1.3 消费型接口-Consumer

方法名称 方法描述
void accept(T t) 提供一个消费的方法
default Consumer andThen(Consumer<? super T> after) 连接多个消费型接口
package com.xxx.lambda.function;

import java.util.function.Consumer;

public class ConsumerTest {
    public static void main(String[] args) {
        showInfo("函数式接口-消费型-Consumer",(String con) -> {
            System.out.println(con.substring(0, 1));
        });
    }

    public static void showInfo(String s, Consumer<String> con) {
        con.accept(s);
    }
}

package com.xxx.lambda.function;

import java.util.function.Consumer;

public class ConsumerTest2 {
    public static void main(String[] args) {
        getStr("asdfgQWERTY",(String con1) -> {
            
        },(String con2) -> {

        });
    }

    public static void getStr(String s, Consumer<String> consumer1, Consumer<String> consumer2){
        //andThen连接多个消费型接口
        //accept提供一个消费的方法
        consumer1.andThen(consumer2).accept(s);
    }
}

1.4 断言型接口-Predicate

方法名称 方法描述
default Predicate and(Predicate<? super T> other) 并且&&
default Predicate negate() 非!
default Predicate or(Predicate<? super T> other) 或者
boolean test(T t) 用于判断
package com.xxx.test01;

import java.util.function.Predicate;

public class PredicateTest {
    public static void main(String[] args) {
        boolean flag = isFlag("最靓的仔", (String s) -> {
            return s.length() > 5;
        });

        System.out.println(flag);
    }

    public static boolean isFlag(String s, Predicate<String> pre){
        return pre.test(s);
    }
}

package com.xxx;

import java.util.function.Predicate;

/**
 * 使用断言型接口判断字符串长度是否大于5 并且字符串中是否包含“歌”
 */
public class PredicateTest2 {
    public static void main(String[] args) {
        boolean flag = isFlag("他想高歌一首", (String p1) -> {
            return p1.length() > 5;
        }, (String p2) -> {
            return p2.contains("歌");
        });

        System.out.println(flag);
    }

    public static boolean isFlag(String s, Predicate<String> p1, Predicate<String> p2) {
        return p1.negate().test(s);
    }
}

package com.xxx;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;

/**
 * 使用断言型接口判断 String[] ss={"迪丽热巴","古力娜扎","马尔扎哈"}
 * 将数组中元素满足两个条件 元素字符长度==4 元素中"迪"存入集合中
 */
public class PredicateTest3 {
    public static void main(String[] args) {
        String[] ss={"迪丽热巴","古力娜扎","马尔扎哈"};

        List<String> list = showInfo(ss, (String s1) -> {
            return s1.length() == 4;
        }, (String s2) -> {
            return s2.contains("迪");
        });
        System.out.println(list);
    }

    public static List<String> showInfo(String[] arrays, Predicate<String> pre1, Predicate<String> pre2) {
        List<String> list = new ArrayList<>();

        for (String array : arrays) {
            if (pre1.and(pre2).test(array)) {
                list.add(array);
            }
        }

        return list;

    }
}

1.5 函数型接口-Function

方法名称 方法描述
default Function<T,V> andThen(Function<? super R,? extends V> after) 用于连接多个函数型接口
R apply(T t) 用于来进行转换
package com.xxx;

import java.util.function.Function;

/**
 * 使用Function将字符串转换为整数类型
 */
public class FunctionTest {
    public static void main(String[] args) {
        Integer in = showInfo("123", (String s) -> {
            return Integer.parseInt(s);
        });
        System.out.println();
    }

    public static Integer showInfo(String s, Function<String, Integer> fun) {
        return fun.apply(s);
    }
}

package com.xxx;

import java.util.function.Function;

/**
 * 使用Function将字符串转换为整数类型 再将整数类型转换为字符串类型
 */
public class FunctionTest2 {
    public static void main(String[] args) {
        String s = showInfo("123", Integer::parseInt, (Integer i2) -> {
            return i2 + "";
        });
        System.out.println(s);

    }

    public static String showInfo(String s, Function<String, Integer> fun1, Function<Integer,String> fun2) {
        return fun1.andThen(fun2).apply(s);
    }
}

标签:Predicate,return,String,接口,Java8,static,public,函数
From: https://www.cnblogs.com/wyzel/p/16829997.html

相关文章

  • C语言 外部函数引用
    //!!!!!!!!!!!数组在main函数传参的时候外函数是不能单单用sizeof(a)/sizeof(a[0])来求数组大小的!!!!!!// 应该在main()函数里面求出数组大小再用传到外部函数当中!!!!!!//一般把函数的声......
  • DFirst 和 DLast 函数
    来源:DFirst和DLast函数(microsoft.com)当只需要来自该字段的任何值时,可以使用 DFirst 和 DLast 函数从表或查询中的特定字段返回随机记录。在窗体或报表上的宏......
  • 用函数模板实现对n个数进行由小到大排序
    #include<iostream>usingnamespacestd;//用模板实现两个数值交换template<classT>voidtswap(T*x,T*y){inttemp=*x;*x=*y;*y=temp;}//排序模板......
  • 用函数模板比较两个数的大小
    #include<iostream>usingnamespacestd;//用模板实现输出两个数当中最小的值template<classT>Ttmin(Tx,Ty){returnx<y?x:y;}voidmain(){inta=5,b......
  • 用函数模板实现两个数值交换
    #include<iostream>usingnamespacestd;//用模板实现两个数值交换template<classT>voidtswap(T*x,T*y){inttemp=*x;*x=*y;*y=temp;}voidmain()......
  • chap 5函数与递归 总结
    chap5函数与递归 学习总结一、函数的类型函数分为库函数和自定义函数。库函数是在编程过程中可以直接使用的函数。例如:而自义定函数则是由我们自己定义其功能并调用......
  • 求n的阶乘(函数)
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intFac(intn){ inti=0; intret=1; for(i=1;i<=n;i++) { ret*=i; } returnret;}intm......
  • python numpy 基础科学计算包,数学函数库
    pipinstallnumpynumpy.array()函数,强大的N维数组对象ndarrayimportnumpyasnpa=np.array([1,2,3])print(a)[123]#多于一个维度importnumpyasnpa......
  • python 回调函数
    回调函数:回头调用一下 把函数当成一个参数传递给另外一个函数 在当前函数执行完毕之后,最后调用一下当参数传递进来的函数 add_done_callback(回调函数)功能: 支付状态......
  • 韵达快递 | 单号查询接口API
    如何利用快递鸟提供的接口来查询韵达快递的物流轨迹。讲解之前我们来看一下,接口完成以后的实际显示效果以下是产品应用截图,调用快递鸟接口获得的轨迹信息:实际上快递鸟返回的......