Lambda表达式

函数式接口

 一个接口中有且只有一个抽象方法,这种接口视为函数式接口

函数式编程

 基于函数式接口并使用Lambda表达的编程方式,函数式编程理念是将代码作为可重用数据代入到程序运行中

 

Lambda表达式语法

复制代码
package com.lamba;

@FunctionalInterface
public interface MathOperation {
    public Float operate(Integer a,Integer b);
}
复制代码
复制代码
package com.lamba;

public class LambdaSample {
    public static void main(String[] args) {
        //标准Lambda使用方式
        //约束条件:Lambda表达式只能实现有且只有一个抽象方法的接口,Java称 '函数式接口'
        MathOperation addition = (Integer a,Integer b)->{
            System.out.println("加法运算");
            return a+b+0f;
        };
        System.out.println(addition.operate(5, 3));

        //2.Lamdba允许忽略参数类型
        MathOperation substraction = (a,b)->{
            return a-b+0f;
        };
        System.out.println(substraction.operate(5, 3));
        //3.单行实现代码可以省略大括号和return
        MathOperation multiplication = (a,b)->a*b+0f;
        System.out.println(multiplication.operate(5, 3));
    }
}
复制代码

 

常用函数式接口

 

Predicate

复制代码
package com.lamba;

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

public class PredicateSample {
    public static void main(String[] args) {
        //判断是否大于2
        Predicate<Integer> predicate = n->n>4;
        boolean test = predicate.test(2);
        System.out.println(test);

        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
        filter(list,n->n%2==1);//打印奇数
        filter(list,n->n%2==0);//打印偶数
        //List<String> list1 = Arrays.asList("java","python","php","HTML");
        //filter(list1,str->str.indexOf('a')!=-1);
    }

    public static void filter(List<Integer> list , Predicate<Integer> predicate){
        for(Integer num : list){
            if(predicate.test(num)){
                System.out.print(num+" ");
            }
        }
        System.out.println();
    }
}
复制代码

 

Consumer

复制代码
package com.lamba;

import java.util.function.Consumer;

public class ConsumerSample {
    public static void main(String[] args) {
        output(s-> System.out.println("向控制台打印:"+s) );
        output(s-> System.out.println("向XXX网站发送数据包:"+s) );
    }
    public static void output(Consumer<String> consumer){
        String text="asdfghjkl qwertyuiop";
        consumer.accept(text);
    }
}
复制代码

 

Function

复制代码
package com.lamba;

import java.util.*;
import java.util.function.Function;

public class FunctionSample {
    /**
     * 利用Func函数式接口生成定长字符串
     */
    public static void main(String[] args) {
        Function<Integer,String> randomStringFunction = l->{
            String chars="abcdefghijklmnopqrstuvwxyz1234567890";
            StringBuffer stringBuffer = new StringBuffer();
            Random random = new Random();
            for(int i=0;i<l;i++){
                int position = random.nextInt(chars.length());
                stringBuffer.append(chars.charAt(position));
            }
            return stringBuffer.toString();
        };
        System.out.println(randomStringFunction.apply(9));
     max(); }
/** * 寻找List集合中最大值 */ public static void max(){ Function<List<Integer>,Integer> maxIntegerFunction = list -> { int max=-1; for(Integer l:list) if(l>max) max=l; return max; }; System.out.println(maxIntegerFunction.apply(Arrays.asList(1, 2, 13, 14, 18, 101))); } }
复制代码

 

posted @   南风知君  阅读(53)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示