美文网首页java8的lambda表达式
java8--函数式接口,以及和Lambda表达式的关系

java8--函数式接口,以及和Lambda表达式的关系

作者: 哈哈_dfde | 来源:发表于2019-03-08 17:40 被阅读0次

一:函数式接口
函数式接口其实本质上还是一个接口,但是它是一种特殊的接口:SAM类型的接口(Single Abstract Method)。
jdk8的lambda表达式的函数式接口主要有:


image.png

二:Predicate<T>
确定入参为T的参数,是否满足方法中的条件。
涉及到的lambda表达式方法主要是 filter(Predicate<T> predicate);
demo:

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

  public class PredicateDemo {
        public static void main(String[] args) {
    //给list添加参数
        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
        System.out.println("输出所有参数字:");
        eval(list, n -> true);
        System.out.println("\n输出能被2整除的数字:");
        eval(list, n -> n%2==0);
        System.out.println("\n输出大于3的数字:");
        eval(list, n-> n > 3 );
   }

//自定义方法
   public static void eval(List<Integer> list, Predicate<Integer> predicate) {
        for(Integer n: list) {        
           if(predicate.test(n)) {
               //可以将满足条件的参数返回,这里只做输出
               System.out.print(n + " ");
           }
        }
     }
   }

2 Function<T,R>
对类型T的入参,返回类型是R的对象,这个函数主要是调用内部的apply方法,T apply(R)
主要针对的stream方法:map
demo

 public class Operation{
     public static final int addOne(int a){
     return a+1;
     } 
public static int oper(int a, Function<Integer,Integer> action){
     return action.apply(a);
}
public static void main(String[] args){
  int x = 1;
  int y = oper(x,x -> addOne(x));//这里可以换成方法引用的写法 int y = 
  oper(x,Operation::addOne)
  System.out.printf("x= %d, y = %d", x, y); // 打印结果 x=1, y=2
  y = oper(x, x -> x + 3 ); // y = 4
  y = oper(x, x -> x * 3 ); // y = 3    
   }
 }

3 Consumer接口,顾名思义将T为入参的对象进行消费,无返回。

  public static void main(String[] args) {
    Consumer<String> printString = s -> System.out.println(s);
    printString.accept("helloWorld!");
    //控制台输出 helloWorld!
  }

4 Supplier<T>接口 ,返回对象为T的方法,没有入参

      public static void main(String args[]){
          Supplier<String> getInstance = () -> "HelloWorld!";
          System.out.println(getInstance.get());
      } 

相关文章

  • Lambda表达式

    Lambda表达式与函数式接口紧密相关,函数式接口介绍 Lambda表达式的基本语法 Java Lambda表达式...

  • Lambda表达式总结

    Lambda表达式总结使用范例以及例子Lambda表达式基础语法函数式接口Lambda练习Java8四大内置函数式...

  • java8--函数式接口,以及和Lambda表达式的关系

    一:函数式接口函数式接口其实本质上还是一个接口,但是它是一种特殊的接口:SAM类型的接口(Single Abstr...

  • JDK8新特性 内置函数式接口

    1. 内置函数式接口由来 lambda表达式的前提是需要有函数式接口。而且lambda表达式使用时不关心接口名,抽...

  • 《Java 8实战》学习总结

    Java 8新特性概览 Lambda表达式 流 默认方法 Lambda表达式 Lambda和函数式接口Java 8...

  • Java8实战之-Lambda

    应该在什么地方使用Lambda表达式 你可以在函数式的接口上使用Lambda表达式。什么是函数式接口?接口只定义了...

  • 2019-01-24 JDK1.8新特性NO:01

    Default 默认 函数式接口 Lambda表达式

  • Java 接口知识点

    接口的特性 函数式接口 抽象类和接口区别 Lambda表达式 java常用接口

  • Java8新特性

    1.Lamda表达式 Lambda表达式的作用主要是用来简化接口的创建,使用Lambda表达式接口必须是函数式接口...

  • 2019-02-03——Java8 Lambda

    一.认识Lambda Lambda表达式专门针对只有一个方法的接口(即函数式接口) lambda表达式的基本格式为...

网友评论

    本文标题:java8--函数式接口,以及和Lambda表达式的关系

    本文链接:https://www.haomeiwen.com/subject/dioqpqtx.html