Java使用者功能接口示例

时间:2020-01-09 10:35:14  来源:igfitidea点击:

在这篇文章中,我们将看到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