四大内置核心函数式编程&&Lambda表达式

执键写春秋
• 阅读 1560

1. 基于Function函数式使用Lambda表达式

Function<T,R>:接收一个参数并返回结果的函数;R apply(T t):将此参数应用到函数中

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.function.Function;
/**
 * 获取集合最大值
 */
public class LambdaFace {
    private static List<Integer> list = Arrays.asList(1, 2, 13, 14, 18, 101);
    //接收一个参数并返回结果的函数,即接收一个List集合,返回一个Integer数据
    public static void getMax(Function<List<Integer>, Integer> function){
        //将此list参数应用到Function函数式接口中,并输出其返回的结果
        System.out.println(function.apply(list));
    }
    public static void main(String[] args) {
        //调用方法,使用lambda表达式,n为传入的参数,利用Collections.max()方法获取集合最大值,并返回
        getMax(n -> {
            Integer max = Collections.max(n);
            return max;
        });
    }
}

2. 基于BiFunction函数式使用Lambda表达式

BiFunction<T,U,R>:接受两个参数并返回结果的函数;R apply(T t, U u):将参数应用于函数执行

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.BiFunction;

/**
 * 获取两个List集合中的重复元素
 */
public class Lambda_BiFunction {
    private static List<Integer> list1 = Arrays.asList(1,3,5,7,9);
    private static List<Integer> list2 = Arrays.asList(1,2,4,6,9);
    public static void getSame(BiFunction<List<Integer>,List<Integer>,List<Integer>>biFunction){
        for(Integer num : biFunction.apply(list1,list2)){
            System.out.println(num);
        }
    }
    public static void main(String[] args) {
        getSame((n,m) -> {
            //存放重复数据
            List<Integer> result = new ArrayList<Integer>();
            for (Integer num : n) {//遍历n
                if (m.contains(num)) {//如果存在这个数
                    result.add(num);//放进一个list里面,这个list就是交集
                }
            }
            return result;
        });
    }
}

3. 基于Predicate函数式使用Lambda表达式

Predicate:对给定的输入参数执行操作,返回一个boolean类型的结果(布尔值函数);boolean test(T t):根据给定的参数进行判断

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

/**
 * 查找集合中包含字符“a”的元素
 */
public class Lambda_Predicate {
    private static List<String> list = Arrays.asList("java","PHP","China","World");
    public static void getContains(List<String> list, Predicate<String> predicate){
        for(String str : list){
           if(predicate.test(str)){
               System.out.println(str);
           }
        }
    }
    public static void main(String[] args) {
        getContains(list,n->n.contains("a"));
    }
}

4. 基于BiPredicate函数式接口使用Lambda表达式

BiPredicate<T,U>:对给定的两个输入参数执行操作,返回一个boolean类型的结果(布尔值函数);boolean test(T t, U u):根据给定的两个输入参数进行判断

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

/**
 * 判断集合中是否存在某个元素
 */
public class Lambda_BiPredicate {
    private static List<String> list = Arrays.asList("java","world");
    private static String name = "java";
    public static void IfContains(List<String> list , String name , BiPredicate<List<String>,String> biFunction){
        if(biFunction.test(list,name)){
            System.out.println("集合中存在该元素!");
        }else{
            System.out.println("集合中不存在该元素!");
        }
    }
    public static void main(String[] args) {
        IfContains(list,name,(n,m) ->n.contains(m));
    }
}

5. 基于Consumer函数式接口使用Lambda表达式

Consumer:提供一个T类型的输入参数,不返回执行结果;void accept(T t):对给定的参数执行操作;default Consumer andThen(Consumer<? super T> after):返回一个组合函数,after将会在该函数执行之后应用

import java.util.function.Consumer;

public class Lambda_Consumer {
    public static void main(String[] args) {
        /**
         * void  accept(T t)
         * 对给定的参数执行操作
         */
        Consumer<Integer> consumer1 = (t) -> {
            System.out.println(t*3);
        };
        consumer1.accept(8);
        /**
         * default  Consumer<T>  andThen(Consumer<? super T> after)
         * 返回一个组合函数,after将会在该函数执行之后应用
         */
        Consumer<Integer> consumer2 = (t) -> {
            System.out.println(t*3);
        };
        Consumer<Integer> consumerAfter = (s) -> {
            System.out.println("之后执行:"+s);
        };
        consumer2.andThen(consumerAfter).accept(5);
    }

}

6. 基于BiConsumer函数式接口使用Lambda表达式

BiConsumer<T,U>:提供两个自定义类型的输入参数,不返回执行结果;void accept(T t, U u):对给定的参数执行操作;default BiConsumer<T,U> andThen(BiConsumer<? super T,? super U> after):返回一个组合函数,after将会在该函数执行之后应用

import java.util.function.BiConsumer;

public class Lambda_BiConsumer {

    public static void main(String[] args) {
        /**
         * void  accept(T t, U u):对给定的参数执行操作;
         */
        BiConsumer<String, String> biConsumer = (a, b) -> {
            System.out.println(a.concat(b));
        };

        biConsumer.accept("Hello ", "World!");

        /**
         * default  BiConsumer<T,U>  andThen(BiConsumer<? super T,? super U> after):返回一个组合函数,after将会在该函数执行之后应用
         */
        BiConsumer<String, String> biConsumer1 = (a, b) -> {
            System.out.println(a.concat(b));
        };
        biConsumer.andThen(biConsumer1).accept("Hello", " Java!");
    }
}

7. 基于Supplier函数式接口使用Lambda表达式

Supplier:不提供输入参数,但是返回结果的函数;T get() 获取结果值;

import java.util.function.Supplier;

public class Lambda_Supplier {
    public static void main(String[] args) {
        Supplier<String> supplier = () -> "Hello World!";
        System.out.println(supplier.get());
    }
}
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
JAVA之forEach遍历集合
JAVA之forEach遍历集合在JDK8中,根据Lambda表达式的特性还增加了一个forEach(Consumeraction)方法来遍历集合,该方法所需要的参数是一个函数式接口importjava.util.ArrayList;importjava.util.List;
Wesley13 Wesley13
3年前
Java8
  不管lambda表达式还是Stream流式编程,Function、Consumer、Supplier、Predicate四个接口是一切函数式编程的基础。下面我们详细学习这四个巨头,interfaceSupplier<T    该接口的中文直译是“提供者”,可以理解为定义一个lambda表达式,
Wesley13 Wesley13
3年前
Java8 新增特性 Lambda表达式
               聊聊Lambda  背景:    早在2014年oracle发布了jdk8,在里面增加了lambda模块。于是java程序员们又多了一种新的编程方式:函数式编程,也就是lambda表达式。    以下整理关于Lambda表达式资料(转载地址:https:/
Stella981 Stella981
3年前
JS 对象数组Array 根据对象object key的值排序sort,很风骚哦
有个js对象数组varary\{id:1,name:"b"},{id:2,name:"b"}\需求是根据name或者id的值来排序,这里有个风骚的函数函数定义:function keysrt(key,desc) {  return function(a,b){    return desc ? ~~(ak
Stella981 Stella981
3年前
HIVE 时间操作函数
日期函数UNIX时间戳转日期函数: from\_unixtime语法:   from\_unixtime(bigint unixtime\, string format\)返回值: string说明: 转化UNIX时间戳(从19700101 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式举例:hive   selec
Wesley13 Wesley13
3年前
Java8—一万字的Lambda表达式的详细介绍与应用案例
  基于Java8详细介绍了lambda表达式的语法与使用,以及方法引用、函数式接口、lambda复合等Java8的新特性!文章目录1Lambda的概述2函数式接口2.1Consumer消费型接口2.2Supplier供给型接口2.3Function<T,R函数型接口
Wesley13 Wesley13
3年前
Java8新特性学习
1简述公司自年初终于开始使用java8作为项目的标准jdk,在开发过程中,逐渐认识到java8的很多新特性,确实很方便.其中内容的核心,在于函数式编程,即将函数本身作为对象参数去处理.其中涉及到三个关键新特性:1.lambda表达式(及函数式接口)2.stream3.方法引用这三个新特性的使用是相辅相