函数式编程

2020-11-12  本文已影响0人  曾梦想仗剑天涯

Lamda表达式

//观察传统开发中的问题
package demo;
interface IMessage {
  public abstract void send(String msg);
}
public class JavaDemo {
  public static void main(String [] args) {
    IMessage msg = new IMessage() {   //匿名内部类
      public void send(String msg) {
        System.out.println(msg);
      }
    };
    msg.send("这是一个消息");
  }
}
//使用Lamda表达式实现与之前一样的功能
package demo;
interface IMessage {
  public abstract void send(String str);
}
public class JavaDemo {
  public static void main(String [] args) {
    IMessage msg = (str) -> {
      System.out.println(str);
    };
    msg.send("这是一个消息");
  }
}
package demo;
@FunctionalInterface
interface IMessage {
  public abstract void send(String str);
}
public class JavaDemo {
  public static void main(String [] args) {
    IMessage msg = (str) -> {
      System.out.println(str);
    };
    msg.send("这是一个消息");
  }
}
//定义没有参数的方法
package demo;
@FunctionalInterface
interface IMessage {
  public abstract void send();
}
public class JavaDemo {
  public static void main(String [] args) {
    IMessage msg = () -> {
      System.out.println("这是一个消息");
    };
    msg.send();
  }
}

//定义有参数的处理形式
package demo;
@FunctionalInterface
interface IMath {
  public abstract int add(int x, int y);
}
public class JavaDemo {
  public static void main(String [] args) {
    IMath math = (x, y) -> {
      return x + y;
    };
    System.out.println(math.add(10, 5));
  }
}

//简化Lamda操作
package demo;
@FunctionalInterface
interface IMath {
  public abstract int add(int x, int y);
}
public class JavaDemo {
  public static void main(String [] args) {
    IMath math = (x, y) -> x + y;;
    System.out.println(math.add(10, 5));
  }
}

方法引用

//引用静态方法
//在String类里面提供有String.valueOf()方法,这个方法就是静态方法
//方法定义:public static String vauleOf(int i),该方法有参数,并且有返回值
package demo;
@FunctionalInterface
//P描述的是参数,R描述的是返回值
interface IFunction<P, R> {
  public abstract R change(P p);
}
public class JavaDemo {
  public static void main(String [] args) {
    IFunction<Integer, String> fun = String :: valueOf;
    String str = fun.change(100);
    System.out.println(str.length());
  }
}
//引用实例化对象中的方法
//String类里面有一个转大写的方法:public String toUpperCase()
//这个对象必须在有实例化对象提供的情况下才可以调用
package demo;
@FunctionalInterface
//R描述的是返回值
interface IFunction<R> {
  public abstract R upper();
}
public class JavaDemo {
  public static void main(String [] args) {
    IFunction<String> fun = "www.baidu.com" :: toUpperCase;
    System.out.println(fun.upper());
  }
}
//引用指定类中的方法
package demo;
@FunctionalInterface
interface IFunction<P> {
  public abstract int compare(P p1, P p2);
}
public class JavaDemo {
  public static void main(String [] args) {
    IFunction<String> fun = String :: compareTo;
    System.out.println(fun.compare("A", "a"));
  }
}
//引用构造方法
package demo;
class Person {
  private String name;
  private int age;
  public Person(String name, int age) {
    this.name = name;
    this.age = age;
  }
  public String toString() {
    return "姓名:" + this.name + "、年龄:" + this.age;
  }
}
@FunctionalInterface
interface IFunction<R> {
  public abstract R create(String s, int a);
}
public class JavaDemo {
  public static void main(String [] args) {
    IFunction<Person> fun = Person :: new;
    System.out.println(fun.create("张三", 20));
  }
}

内建函数式接口

/**
  接口定义:
  @FunctionalInterface
  public interface Function<T, R> {
    public R apply(T t)
  }
*/
//在String类中有一个方法判断是否以指定的字符串开头:public boolean startsWith(String str);
//接口使用
package demo;
import java.util.function.*;
public class JavaDemo {
  public static void main(String [] args) {
    Function<String, Boolean> fun = "**Hello" :: startsWith;
    System.out.println(fun.apply("**"));
  }
}
/**
  接口定义:
  @FunctionalInterface
  public interface Consumer<T> {
    public void accept(T t);
  }
*/
//System.out.println();
//接口使用
package demo;
import java.util.function.*;
public class JavaDemo {
  public static void main(String [] args) {
    Consumer<String> con = System.out :: println;
    con.accept("www.baidu.com");
  }
}
/**
  接口定义:
  @FunctionalInterface
  public interface Supplier<T> {
    public T get();
  }
*/
//在String类中提供有转小写方法,这个方法没有接收参数,但是有返回值:public String toLowerCase();
//接口使用
package demo;
import java.util.function.*;
public class JavaDemo {
  public static void main(String [] args) {
    Supplier<String> sup = "www.BAIDU.com" :: toLowerCase;
    System.out.println(sup.get());
  }
}
/**
  接口定义:
  @FunctionalInterface
  public interface Predicate<T> {
    public boolean test(T t)
  }
*/
//在String类有一个equalsIgnoreCase()方法;
//接口使用
package demo;
import java.util.function.*;
public class JavaDemo {
  public static void main(String [] args) {
    Predicate<String> pre = "baidu" :: equalsIgnoreCase;
    System.out.println(pre.test("BAIDU"));
  }
}
上一篇 下一篇

猜你喜欢

热点阅读