`

java 8 内置函数接口的使用

    博客分类:
  • Java
 
阅读更多

使用Java 编程,总会遇到很多函数接口,但Java 开发工具包(JDK)提供的一组核心函数接口会频繁出现,如图



 每个函数Demo如下:

 

Function<T,R>              R apply(T t);                    

Function<String, String> function = x -> x.toUpperCase();
Function<String, String> function2 = x -> x.toLowerCase();
convertString(function);// prints STRANGE
convertString(function2);// prints strange
public static void convertString(Function<String, String> function){
    System.out.println(function.apply("StRaNgE"));
}

 Supplier<T>                  T get(); 

Supplier<String> supplier1 = () -> "String1";
Supplier<String> supplier2 = () -> "String2";
printSuppliedString(supplier1);
printSuppliedString(supplier2);
public static void printSuppliedString(Supplier<String> supplier){
    System.out.println(supplier.get());
}

 Consumer<T>           void accept(T t);

Consumer<String$gt function = x -> System.out.println(x);
Consumer<String$gt function2 = x -> System.out.println(x.toLowerCase());
consumeString(function, "StringA");// prints StringA
consumeString(function2,"StringA");// prints stringa
public static void consumeString(Consumer<String> consumer, String x) {
   consumer.accept(x);
}

 interface Predicate<T>     boolean test(T t);

Predicate<Double> function = x -> x > 10;
Predicate<Double> function2 = x -> x < -10;
System.out.println(function.test(new Double(9)));// prints false
System.out.println(function2.test(new Double(-20)));// prints true
public static void testValue(Predicate&ltDouble&gt predicate, Double d){
   predicate.test(d);
}
   

 

IntConsumer	void accept(int value);	This function accepts a primitive int and does not
 return any value

 

BiFunction<T, U, R>	R apply(T t, U u);	This function accepts two arguments and 
returns a value.
 
BinaryOperator<T> extends BiFunction<T,T,T>	R apply(T t, U u);	This function is a 
special case of BiFunction where both the input parameters and the return is of the same type.
 

 

 


Method References

To increase readability java8 has come up with method references. You can access a method (lambda expression) using the :: notation. The only condition that the methods need to follow is that they should be assignable to any FunctionalInterface as described above. There are four kinds of method references, we look at them in below.

 

 

public class Example {
 
    public int add(int a, int b) {
        return a + b;
    }
 
    public static int mul(int a, int b) {
        return a * b;
    }
 
    public String lower(String a) {
        return a.toLowerCase();
    }
 
    public void printDate(Date date) {
        System.out.println(date);
    }
 
    public void oper(IntBinaryOperator operator, int a, int b) {
        System.out.println(operator.applyAsInt(a, b));
    }
 
    public void operS(Function<String, String> stringOperator, String a) {
        System.out.println(stringOperator.apply(a));
    }
 
    public GregorianCalendar operC(Supplier<GregorianCalendar> supplier) {
        return supplier.get();
    }
 
}      

 

 

 

Lambda Expressions - Composition

Composition allows applying lambda expressions one after another. There are two methods:

  • Function compose(Function before) - The before function is applied first and then the calling function
  • Function andThen(Function after) - The after function is applied after the calling function

Lets look at an example. This example creates a lambda expression for the Math functions. We can then apply one math function after another by using the
compose
and
andThen
methods. We can create a exp(log(sin)) or log(exp(sin)) etc .

 

import java.util.function.Function;
 
public class ExampleCompose {
 
    public static void main(String[] args) {
        ExampleCompose ex = new ExampleCompose();
        Function<Double , Double> sin = d -> ex.sin(d);
        Function<Double , Double> log = d -> ex.log(d);
        Function<Double , Double> exp = d -> ex.exp(d);
        ExampleCompose compose = new ExampleCompose();
        System.out.println(compose.calculate(sin.compose(log), 0.8));
        // prints log:sin:-0.22
        System.out.println(compose.calculate(sin.andThen(log), 0.8));
        // prints sin:log:-0.33
        System.out.println(compose.calculate(sin.compose(log).andThen(exp), 0.8));
        //log:sin:exp:0.80
        System.out.println(compose.calculate(sin.compose(log).compose(exp), 0.8));
        //exp:log:sin:0.71
        System.out.println(compose.calculate(sin.andThen(log).compose(exp), 0.8));
        //exp:sin:log:-0.23
        System.out.println(compose.calculate(sin.andThen(log).andThen(exp), 0.8));
        //sin:log:exp:0.71
 
    }
 
    public Double calculate(Function<Double , Double> operator, Double d) {
        return operator.apply(d);
    }
 
    public Double sin(Double d) {
        System.out.print("sin:");
        return Math.sin(d);
    }
 
    public Double log(Double d) {
        System.out.print("log:");
        return Math.log(d);
    }
 
    public Double exp(Double d) {
        System.out.print("exp:");
        return Math.exp(d);
    }
 
}

 

  • 大小: 36.6 KB
  • 大小: 112.3 KB
分享到:
评论

相关推荐

    Java的函数式接口讲解代码( 函数式接口定义、 函数式接口实战、内置函数式接口...)

    本源码资源提供了Java中的函数式接口相关内容,包括接口定义和使用示例。它涵盖了函数式编程在Java中的基本概念、重要性以及如何使用函数式接口来实现函数式编程的方法。 本源码资源适用于具备一定Java编程基础的...

    java8函数式编程(csdn)————程序.pdf

    Java 8 中提供了 several 内置函数式接口,例如: * Consumer 消费型接口: ```java @FunctionalInterface public interface Consumer&lt;T&gt; { void accept(T t); default Consumer&lt;T&gt; andThen(Consumer&lt;? super T&gt; ...

    672.670.JAVA基础教程_动态代理与Java8新特性-Java内置的函数式接口介绍(672).rar

    在本教程中,我们将深入探讨Java编程语言中的两个核心概念:动态代理和Java 8的新特性,特别是关于Java内置的函数式接口的介绍。动态代理是Java提供的一种机制,允许我们在运行时创建对其他对象的代理,从而在不修改...

    java8-函数式接口.pdf

    Java 8引入了函数式接口的概念,这是一项重要的更新,旨在支持函数式编程风格。函数式接口是指只有一个抽象方法的接口,这样的设计使得接口能够被用作 Lambda 表达式的类型。Lambda 表达式是一种简洁的匿名函数表示...

    java函数速查手册常用函数

    12. **内置函数**:Java提供了一些内置函数,如`Math`类中的`sqrt()`(平方根)、`random()`(随机数)等。 13. **异常处理**:`try-catch-finally`语句块用于捕获和处理程序运行时可能出现的错误。 14. **Lambda...

    面向Java开发者的函数式编程

    1. Lambda表达式:Lambda表达式是Java 8的一个重要特性,它简化了对函数接口的实现。Lambda表达式由三部分组成:参数列表、箭头符号和函数体。例如,`(int x, int y) -&gt; x + y` 是一个接受两个整数参数并返回它们之...

    java函数速查

    Java标准库提供了大量内置函数,涵盖了I/O、数学计算、字符串处理、集合操作等多个方面。 在Java中,函数定义通常包含以下部分: 1. 访问修饰符:public, private, protected 或默认,决定函数的可见性。 2. 返回...

    java编程主要函数的用法详解

    Java提供了一系列内置函数,如`Math`类中的函数,用于执行数学运算,如求平方根、最大值和最小值等: ```java double squareRoot = Math.sqrt(16); // 计算平方根 ``` 5. **静态函数** 静态函数属于类,而不是...

    Java 8新特性 内建函数式接口详解

    此外,Java 8还提供了一些其他内置的函数式接口,如`BiFunction`(接受两个参数并返回一个结果)、`Runnable`(无参数无返回的行动)以及`Comparator`(比较两个对象的接口)。所有这些接口都设计为与Lambda表达式...

    java函数查询

    使用Java函数查询工具,开发者可以快速定位到需要的函数,避免了在大量源码或在线文档中寻找的时间,从而提高开发效率,特别是在处理复杂项目时。 7. **学习与进阶**: 对于初学者,这样的查询手册有助于理解和...

    java经典小程序-函数小程序

    Java提供了一些内置函数,如`Math.abs()`用于求绝对值,`System.out.println()`用于打印输出。同时,我们也可以根据需求创建自己的函数。 6. **异常处理**: 在函数中,可能会遇到运行时错误,Java通过异常处理...

    Java 8函数式编程1

    Java 8定义了一些内置的函数式接口,如`Runnable`, `Supplier`, `Consumer`, `Function`, `Predicate`等,它们为不同类型的函数操作提供了便利。 6. **领域特定语言(DSL)的构建** 函数式编程风格鼓励使用表达性强...

    《Java8新特性学习教程》-(Java8指南)带您玩转Java8!!!.zip

    Java8其他相关学习博文Java8 Stream 流教学教程如何在Java8中风骚走位无意空指针异常Java8 发行篇(一) | 线程与执行器目录一、接口内允许添加默认实现的方法二、Lambda 表达式三、函数式接口 函数式接口四、方便的...

    浅析Java8新特性Lambda表达式和函数式接口

    Java 8 内置函数式接口: * 四大核心函数式接口:Runnable、Callable、Predicate、Function * 其他函数式接口:Consumer、Supplier、BiFunction 等 Lambda 表达式的优点: * 简化代码:使用 Lambda 表达式可以...

    Java8函数式编程2

    1. **Lambda表达式**:Lambda表达式是Java 8中的一大亮点,它简化了处理函数接口的方式。Lambda表达式可以被视为一种轻量级的函数,可以被赋值给变量,作为参数传递,或者在方法中返回。例如,`Runnable r = () -&gt; ...

    Java计算机语言函数应用.rar

    6. **内置函数**:Java标准库提供了大量内置函数,如`Math`类中的`sqrt`(求平方根)、`random`(生成随机数)等,极大地简化了开发工作。 7. **递归函数**:在解决某些问题时,我们可能会用到递归函数,即函数在其...

    java8_32.zip

    2. **函数式接口**:为了支持lambda表达式,Java 8定义了函数式接口,如Runnable、Callable和Consumer等。这些接口只有一个抽象方法,可以被lambda表达式所代表。 3. **方法引用和构造器引用**:除了lambda表达式,...

    671.669.JAVA基础教程_动态代理与Java8新特性-函数式接口的介绍(671).rar

    Java 8引入了大量内置的函数式接口,如`java.util.function.Function`、`java.util.function.Consumer`、`java.util.function.Predicate`等,它们在编写简洁的函数式代码时扮演着重要角色。Lambda表达式是一种匿名...

    Java计算机语言函数应用

    9. **内置函数(内置方法)**:如`System.out.println()`用于输出,`Math.pow()`用于计算幂,都是Java提供的内置函数。 10. **回调函数**:通过传递函数作为参数,让其他函数在适当的时候调用,常用于异步编程。 ...

Global site tag (gtag.js) - Google Analytics