lamdba函数编程实例及工具类

原创 2018年04月15日 23:18:49

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);
    }

}
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zyt807/article/details/79954997

python中lamdba的用法

lamdba是一个匿名函数经常用在sorted()这样的函数中 https://stackoverflow.com/questions/13669252/what-is-key-lambda...
  • sinat_38395246
  • sinat_38395246
  • 2018-01-17 17:40:07
  • 32

c++ lamdba表达式

lamdba就是一个匿名函数,是一个局部函数,也是一个闭包。 基本的表达式: 1:     [capture]   表示在body中以怎样的形式捕获外部变量: []  : 不captur...
  • yyhero1
  • yyhero1
  • 2016-02-21 00:55:47
  • 796

Lamdba java8 函数式开发简单汇总

package aliyun_java_sdk.aliyun_java_sdk; import com.beust.jcommander.internal.Lists; import org.jun...
  • u013035314
  • u013035314
  • 2017-04-26 21:11:59
  • 363

linux c++ 绑定函数得简单实现

#include #include using namespace std; template T f(T num) {   return num; } template class P1 {  ...
  • mxlwd168
  • mxlwd168
  • 2016-05-26 14:08:56
  • 186

精通Windows_API:函数、接口、编程实例

  • 2011年06月21日 20:24
  • 12.73MB
  • 下载

java数据库编程实例

  • 2012年04月08日 19:06
  • 42KB
  • 下载

精通Windows.API-函数、接口、编程实例

  • 2011年11月04日 14:58
  • 48.01MB
  • 下载

精通windowsAPI函数接口编程实例源代码

  • 2012年03月20日 17:35
  • 41.52MB
  • 下载

Java8 Lamdba表达式 001

在一个已经存在的编程语言里很少有对现有的生态系统起重大影响的新特性。Lambda表达式对于Java语言就是这种意义的存在。简单来说,Lambda表达式提供了便利的方式去创建一个匿名的功能。提供了一个简...
  • micro_lmj
  • micro_lmj
  • 2014-10-27 17:15:16
  • 970

lamdba表达式和八大查询语句查询

(一)输入参数在Lambda表达式中,输入参数是Lambda运算符的左边部分。它包含参数的数量可以为0、1或者多个。只有当输入参数为1时,Lambda表达式左边的一对小括弧才可以省略。输入参数的数量大...
  • being_towards_death
  • being_towards_death
  • 2018-04-08 11:34:58
  • 28
收藏助手
不良信息举报
您举报文章:lamdba函数编程实例及工具类
举报原因:
原因补充:

(最多只允许输入30个字)