Java使用者功能接口示例
在这篇文章中,我们将看到Java消费者功能接口的示例,它是内置功能接口之一。
使用者功能接口表示接受单个参数且不返回结果的操作。此功能接口中的抽象方法是accept(T t),并且还有一个默认方法andThen()。
消费者功能接口示例
在示例中,创建了一个整数列表,然后显示该列表的元素。
我们将使用实现消费者功能接口的lambda表达式。我们编写的Lambda表达式实现了功能接口的抽象方法,因此对于Consumer功能接口,lambda表达式正在实现accept()方法。
import java.util.Arrays; import java.util.List; import java.util.function.Consumer; public class ConsumerExample { public static void main(String[] args) { Consumer<Integer> consumer = i -> System.out.println(i); List<Integer> numList = Arrays.asList(1, 2, 3, 4); for(Integer i : numList) { consumer.accept(i); } } }
输出:
1 2 3 4
在这里,此语句Consumer <Integer> Consumer = i-> System.out.println(i +"");是Consumer作为lambda表达式的实现。由于实现是功能接口的实例,因此将其分配给类型为Consumer的变量。
Lambda支持"目标类型",该目标类型可从使用对象的上下文中推断出对象类型。调用consumer.accept()方法时,Java可以从上下文中推断要在哪里寻找accept()方法的实现。
使用者功能接口和Then()方法示例
Consumer接口中还有一个默认方法andThen()。
和Then(Consumer <?
import java.util.Arrays; import java.util.List; import java.util.function.Consumer; public class ConsumerExample { public static void main(String[] args) { // First Consumer Consumer<String> consumer = s -> System.out.print("Original String- " + s); // Adding another consumer using andThen() Consumer<String> consumerAfter = consumer.andThen(s -> System.out.print(" " + s.toUpperCase() + "\n")); List<String> nameList = Arrays.asList("Delhi", "Bangalore", "Hyderabad", "Lucknow"); for(String str : nameList) { consumerAfter.accept(str); } } }
输出:
Original String- Delhi DELHI Original String- Bangalore BANGALORE Original String- Hyderabad HYDERABAD Original String- Lucknow LUCKNOW
在这里,第一个使用者打印传递的值,第二个使用者打印大写的相同值。
andThen()方法在第一个使用者的实例上调用,其参数为第二个使用者。在第二个使用者的实例上调用accept()方法时,它将依次依次调用第一个使用者和第二个使用者。
JDK中的使用者功能接口
这些内置功能接口也在JDK中广泛使用。经常使用的使用者功能接口的一个示例是使用forEach()方法迭代集合时。方法forEach()以Consumer为参数。
forEach(Consumer <?super E> action)–对Iterable的每个元素执行给定的操作,直到处理完所有元素或者该操作引发异常为止。
可以使用forEach()更简洁地编写上面显示的示例。
public class ConsumerExample { public static void main(String[] args) { List<String> nameList = Arrays.asList("Delhi", "Bangalore", "Hyderabad", "Lucknow"); nameList.forEach( s -> System.out.print(s + " ")); } }
输出:
Delhi Bangalore Hyderabad Lucknow