java8 jdk1.8 lambda表达式(三) 四大核心函数式接口

内置的四大核心函数式接口

java8 jdk1.8 lambda表达式(一) 入门篇
java8 jdk1.8 lambda表达式(二) 语法篇
java8 jdk1.8 lambda表达式(三) 四大核心函数式接口


内置的四大核心函数式接口(前四个)
和其他的的子接口

函数式接口返回类型参数类型用途
Consumer<,T> : 消费性接口voidT类型为 T 的对象操作 无返回值: accetp(T t)
Supplier<,T> : 供给型接口T返回对象为T的操作,没有参数: get()
Function<T,R> : 函数型接口RT对参数为T的对象操作并且返回R类型的对象的结果: apply(T,R)
Predicate<,T> : 判断性接口boolT对参数为T的对象进行操作判断,并返回bool类型,:boolean test(T t)
....
BiFunction<T,U,R>RT , UR apply(T t,U u);
UnaryOperator<,T> : Function子接口TTT apply(T t);
BinaryOperator<,T> : BiFUnction子接口TT , TT Tapply(T t1,T t2);
BiConsumer<T,U>voidT , Uvoid accept(T t,U u);
....
ToIntFunction<,T>intT"计算 int 的值
ToLongFunction<,T>longT计算 long 的值
ToDoubleFunction<,T>doubleT计算 Double 的值
....
IntFunction<,R>Rint计算 int 的值
LongFunction<,R>Rlong计算 long 的值
DoubleFunction<,R>Rdouble计算 double 的值

示例:

consumer (消费型接口:有参数无返回值)

类型为 T 的对象操作 无返回值: accetp(T t)

    @Test
    public void test1(){
        happy(100,x -> System.out.println("大保健消费:"+(x-5)));
    }

    public void happy(double money, Consumer<Double> consumer){
        consumer.accept(money);
    }

结果:

大保健消费:95.0

Supperlier<,T> (供给型接口 没有参数,有返回值)

返回对象为T的操作,没有参数: get()

   @Test
    public void test2(){
        List<Integer> numList = getNumList(10, () ->(int)(Math.random()*100));
        for (Integer i: numList) {
            System.out.println(i);
        }
    }
    public List<Integer> getNumList(int num, Supplier<Integer> supplier){
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < num; i++) {
            Integer integer = supplier.get();
            list.add(integer);
        }
        return list;
    }

结果:

18
85
68
16
56
87
59
53
37
39

Function<T,R> (函数型接口 有参数,有返回值)

对参数为T的对象操作并且返回R类型的对象的结果: apply(T,R)

@Test
public void test3(){
    String s = strHandler("   asdfghjkl", x -> x.trim());
    System.out.println(s);
    String s1 = strHandler("1234567890",x -> x.substring(2,6));
    System.out.println(s1);
}

public String strHandler(String str, Function<String,String> function){
   return function.apply(str);
}

结果:

asdfghjkl
3456

Predicate 判断性接口 (有参数,返回类型为bool)

对参数为T的对象进行操作判断,并返回bool类型,:boolean test(T t)

   @Test
    public void test4(){
        List<String> list = Arrays.asList("hello","xyy","lambda","www","ok");
        List<String> strings = filterStr(list, x -> x.length() > 3);
        System.out.println(strings);
    }

    public List<String> filterStr(List<String> strings, Predicate<String> predicate){
        List<String> strlist = new ArrayList<>();
        for (String str: strings) {
            if(predicate.test(str)){ //调用判断方法
                strlist.add(str);
            }
        }
        return strlist;
    }

结果:

[hello, lambda]

四大核心函数式接口完犊子了!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值