java请求接口示例_如何使用Java的功能使用者接口示例

通常,Java Stream或其他组件需要将传递给它的对象以执行某种类型的计算或过程,但是当过程完成时,方法不会返回任何内容。 这就是Java的功能使用者接口派上用场的地方。

根据JavaDoc,Consumer接口可以接受任何类型的对象作为输入。 java.util.function.Consumer类具有一个名为accept的非默认方法,该方法将单个对象作为其参数,并且具有void返回类型。

 java.util.function.Consumer<T>
Consumer function type Parameters:
T - object type to be passed to the Consumer accept method

Consumer function methods:
void accept(T t)  This method operates on a single object passed in as an argument.
default Consumer<T> andThen(Consumer after)  Returns a functional Consumer interface 
that can be daisy chained in sequence.

The Consumer's non-default accept method takes a single argument and does not return a result.

使用Java Consumer进行函数式编程

有时,刚接触lambda和流的程序员会被java.util.function包中定义的组件吓倒,所以我总是想提醒开发人员,此包中定义的所有接口都遵循Java 8之前的所有标准实现规则接口。 这样,您可以简单地通过创建实现java.util.function.Consumer的类或对内部类进行编码,将功能性的Consumer接口合并到代码中。

java请求接口示例_如何使用Java的功能使用者接口示例

这是此Consumer函数示例教程中使用的Java代码。

用Java类实现使用者

这是使用Java类而不是lambda表达式实现的Java Consumer函数:

class SimpleConsumerExample implements Consumer<Long> {
  public void accept(Long t) {
    System.out.println(t*t);
  }
}

在主要方法或任何其他Java代码段中,可以根据传统的Java语法规则将SimpleConsumerExample类实例化:

/* Java Consumer example using a class */
SimpleConsumerExample sce = new SimpleConsumerExample();
sce.accept(new Long(2));

同样,也可以使用内部类:

/* Functional Consumer example using inner class */
Consumer<Long> innerConsumer = new Consumer<Long>() {

  @Override
  public void accept(Long t) {
    System.out.println(t*t);
  }
};

innerConsumer.accept(new Long(4));

Lambda和Consumer界面示例

如您所见,java.util.function包中定义的接口没有什么特别的。 它们是符合所有传统语法规则的常规Java接口。 但是,它们也可以与lambda表达式一起使用,而lambda表达式正是功能接口真正的亮点。 这是使用有些冗长的lambda表达式实现的功能性Consumer接口示例:

Consumer<Long> lambdaConsumer = (Long t) -> System.out.println(t*t);
lambdaConsumer.accept(new Long(5));

在演示它们如何工作时,我喜欢使用冗长的lambda语法,但是使用lambda表达式的原因之一是使Java不太冗长。 因此,上面的lambda表达式可以用更加简洁的方式编写:

Consumer<Long> conciseLambda = t -> System.out.println(t*t);
conciseLambda.accept(new Long(10));

使用者接口样本使用案例

功能性Consumer接口在Java API中得到广泛使用,并且java.util.function包中有许多类,例如ObjIntConsumer,BIConsumer和IntConsumer,它们为基本接口提供了扩展的支持。

此外,Java Stream API中的各种方法都将功能性的Consumer接口作为参数,包括collect,forEach和peek等方法。

成为熟练的功能程序员,您只需要掌握几个关键的接口即可。 如果您了解此功能性Consumer接口示例中列出的概念,那么您就可以很好地掌握更新Java API。

消费者教程代码

这是本教程中有关如何使用使用者的代码。

package com.mcnz.lambda;
import java.util.function.*;

public class JavaConsumerExample {

  public static void main (String args[]) {

    /* Java Consumer example using a class */
    SimpleConsumerExample sce = new SimpleConsumerExample();
    sce.accept(new Long(2));

    /* Functional Consumer example using inner class */
    Consumer<Long> innerConsumer = new Consumer<Long>() {
      @Override
      public void accept(Long t) {
        System.out.println(t*t);
      }
    };
    innerConsumer.accept(new Long(4));

    /* Implemented Consumer function with verbose lambda expression */
    Consumer<Long> lambdaConsumer = (Long t) -> System.out.println(t*t);
    lambdaConsumer.accept(new Long(5));

    /* Concise lambda and Consumer function example */
    Consumer<Long> conciseLambda = t -> System.out.println(t*t);
    conciseLambda.accept(new Long(5));

  }
}

/* Class implementing functional Consumer example */
class SimpleConsumerExample implements Consumer<Long> {
  public void accept(Long t) {
    System.out.println(t*t);
  }
}

翻译自: https://www.theserverside.com/blog/Coffee-Talk-Java-News-Stories-and-Opinions/How-to-use-Javas-functional-Consumer-interface-example