lamdba函数编程实例及工具类

1、方法参数以往都是类,变量属性,但是并没有当函数作为入参,而函数入参是有必要的
对于有些方法入参其实只需要一个函数操作后的结果,我不需要知道什么参数类型啊
大大减少了很多不必要的代码,什么创建匿名类啊
但是上手需要一段时间,改变编程习惯和思维需要一段时间

package com.delicacy.oatmeal.java.lamdba;

import lombok.Data;

/**
 * function demo
 * @author zyt
 * @create 2018-04-15 16:40
 **/
public class FunctionInterfaceDemo {

    public static void main(String[] args) {
        Person person = new Person();
        person.setAge(11);
        person.setName("tom");
        person.selfintroduc(e->{return "我叫"+e.getName()+",我今年"+e.getAge(); });

    }

}

@Data
class Person{
    private String name;
    private int age;

    public void selfintroduc(Action<Person> action){
        System.out.println(action.selfintroduce(this));
    }

}

//声明函数接口的注解
@FunctionalInterface
interface Action<T> {
    String selfintroduce(T t);
}

2、下面提供自己所写几个简单的工具类,只是提供简单的思路,还是可以再完善(比如方法内部可以加redisson锁,或者返回自定义的返回值等)

package com.delicacy.oatmeal.java.lamdba;

import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;

/**
 * 常用操作类函数是接口
 *
 * @author zyt
 * @create 2018-04-15 17:23
 **/
public class FunctionUtil {

    //如果存在,则更改,否则插入
    public static <T> void save(T t, Predicate<T> predicate, Consumer<T> consumer1 ,Consumer<T> consumer2) {
        if (predicate.test(t)) consumer1.accept(t);
        else  consumer2.accept(t);
    }

    //如果不存在,则新增
    public static <T> void add(T t, Predicate<T> predicate, Consumer<T> consumer) {
        if (!predicate.test(t)) consumer.accept(t);
    }

    //如果存在,则更改
    public static <T> void update(T t, Predicate<T> predicate, Consumer<T> consumer) {
        if (predicate.test(t)) consumer.accept(t);
    }


    //如果存在,则更改,否则插入
    public static <T,R> R save(T t, Predicate<T> predicate, Function<T,R>  function1, Function<T,R>  function2) {
        if (predicate.test(t)) return function1.apply(t);
        else  return function2.apply(t);
    }

    //如果存在,则更改,否则插入
    public static <T,R> R saveList(List<T> ts, Predicate<List<T>> predicate, Function<List<T>,R>  function1,Function<List<T>,R>  function2) {
        if (predicate.test(ts)) return function1.apply(ts);
        else  return function2.apply(ts);
    }

}

猜你喜欢

转载自blog.csdn.net/zyt807/article/details/79954997