java学习(常用函数式接口)

Supplier函数式接口

java.util.function.Supplier接口包含一个无参的方法,T get()。

  • 用来获取一个泛型参数指定类型的对象数据。

  • Supplier接口被称之为生产型接口,指定接口的泛型是什么类型,那么接口中的get方法就会产生什么类型的数据。

import java.util.function.Supplier;
public class DemoSupplier {
//定义一个方法返回值类型为String,参数为Supplier函数式接口
public static String getString(Supplier sup)
{
//调用get方法,获取String类型数据
return sup.get();
}
public static void main(String[] args) {
//匿名内部
String s1=getString(new Supplier() {
@Override
public String get() {
return “胡歌”;
}
});
//Lambda优化
String s=getString(()->“胡歌”);
System.out.println(s);
System.out.println(s1);
}
}
在这里插入图片描述

练习:求int数组的最大值

public class DemoSupplier {
   public  static  int getMax(Supplier<Integer> sup)
    {
        return  sup.get();
    }
    public static void main(String[] args) {
        int [] arr={1,9,6,24,7,4,12,};
        int max1=getMax(()-> {
                int max=arr[0];
                for (int i = 1; i < arr.length; i++) {
                    if(max<arr[i])
                    {
                        max=arr[i];
                    }
                }
                return  max;
        });
        System.out.println(max1);
    }
}

在这里插入图片描述

Consumer函数式接口

Consumer用于消费数据,其数据类型有泛型决定。

抽象方法accetp

import java.util.function.Consumer;
public class DemoConsumer {
    //定义一个方法,参数为Consumer,消费String类型的数据
    public  static  void method(String name, Consumer<String> con){
        con.accept(name);
    }
     public static void main(String[] args) {
        method("胡歌",(String name)->{
           //消费方式,直接消费
            System.out.println(name);
            //将字符串反转消费
            String reanme=new StringBuffer(name).reverse().toString();
            System.out.println(reanme);
        });
        }

在这里插入图片描述

默认方法andThen

作用:需要两个Consumer接口,可以吧两个Consumer接口组到一起,在对数据进行消费。

import java.util.function.Consumer;
public class DemoConsumer {
      public  static  void method1(String s,Consumer<String> one,Consumer<String> two){
        one.andThen(two).accept(s);
    }
    public static void main(String[] args) {
         		 method1("Hello",
                //把字符串内容转换为大写
                (t)-> System.out.println(t.toUpperCase()),
                //把字符串内容转为小写
                (t)-> System.out.println(t.toLowerCase()));
                }

在这里插入图片描述
练习:
字符串数组中存有多条信息,按指定格式:姓名: xx 年龄: xx的格式打印出来。

import java.util.function.Consumer;
public class DemoConsumer {
      public static  void method2(String[] arr,Consumer<String> con1,Consumer<String> con2){
        for (String s : arr) {
            con1.andThen(con2).accept(s);
        }
    }
    public static void main(String[] args) {
        String [] arr={"胡歌,18","王凯,20","华晨宇,18"};
        method2(arr,(s)->{
        String s1 = s.split(",")[0];
         System.out.print("姓名:"+s1+" ");
        },(s)->{
            String s2 = s.split(",")[1];
            System.out.print("年龄:"+s2+" ");
        });
    }
}

在这里插入图片描述

Predicate接口

有时候需要对某种数据进行判断,从而得到booolean值的结果,我们就可以使用Predicate接口。

test方法
对元素进行判断。
and方法
连接两个判断条件 等同于&&
or方法
连接两个判断条件 等同于||

import java.util.function.Predicate;
public class DemoPredicate {
    public static boolean bool(String s, Predicate<String> predicate) {
      return   predicate.test(s);
    }
    public static boolean boo12(String s, Predicate<String> pre1, Predicate<String> pre2) {
        return pre1.and(pre2).test(s);
    }
    public  static  boolean bool3(String s2,Predicate<String> pre1,Predicate<String> pre2)
    {
        return  pre1.or(pre2).test(s2);

    }
    public static void main(String[] args) {
        boolean b = bool("name", (String str) ->
        {
                return  str.length()>3;
        });
        System.out.println(b);
        System.out.println("===========");

        String s = "dscshjkd";
        boolean a = boo12(s, (String s1) -> {
           return s1.length() > 5;
        }, (String s2) -> {
            return s2.contains("a");
        });
        System.out.println(a);
        System.out.println("===========");
       boolean b3 =bool3(s,(String s1)->{
            return  s1.length()>5;
        },
                (String s2)->{
            return  s2.contains("a");
        });
        System.out.println(b3);
        System.out.println("===========");
    }
}


在这里插入图片描述

Function接口

apply<T,R>方法把T类型的数据转换为R类型的数据。

and方法 用来组合操作
import java.util.function.Function;
public class DemoFunction {
public static void method(String s, Function<String,Integer> function){
Integer apply = function.apply(s);
System.out.println(apply);
}
public static void method1(String s,Function<String,Integer> function1,Function<Integer,String> function2){
String s1 = function1.andThen(function2).apply(s);
System.out.println(s1);

}
 public static void main(String[] args) {
   /* String s = "1024";
    method(s, (String s1) -> {
        //把字符串类型的整数转换为Integer类型的整数
        return Integer.parseInt(s1);
    });
    
    String s1="5201314";
    method1(s1,(String s2)->{
        return  Integer.parseInt(s2)+10;
    },(Integer in1)->{
        return  in1+"";
    });
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值