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类而不是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); } }