马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本日我们还讲讲Consumer、Supplier、Predicate、Function这几个接口的用法,在 Java8 的用法当中,这几个接口固然没有明目张胆的使用,但是,却是润物细无声的。为什么这么说呢?这几个接口都在 java.util.function 包下的,分别是Consumer(消耗型)、supplier(供给型)、predicate(谓词型)、function(功能性),信赖有了后面的解释,你应该非常清楚这个接口的功能了。那么,下面,我们从具体的应用场景来讲讲这个接口的用法!
vConsumer
Java Consumer接口来自Java 8中引入的 java.util.function包。
Consumer是一个功能接口,用来作为lambda表达式或方法引用的任务目的(传递一个参数执行指定的方法)。
Consumer的功能接口是一个接受单一参数而且不返回任何结果的操纵。
Consumer的功能方法是accept(T t)。
Consumer具有以下方法。
1. accept : 这是Consumer功能接口的功能方法。accept 方法对给定的参数进行这一操纵。
2. andThen : 此方法返回一个组合的Consumer,该Consumer先执行原始的Consumer操纵,然后按照从左到右的顺序执行给定的andThen操纵。
功能方法:accept
功能方法accept在功能接口Consumer中的定义使用示例
ConsumerAccept.java- import java.util.function.Consumer;
- public class ConsumerAccept {
- public static void main(String[] args) {
- Consumer<String> nameConsumer = s -> System.out.println(s);
-
- nameConsumer.accept("Mahesh");
- nameConsumer.accept("Krishna");
- }
- }
复制代码 输出使用Lambda表达式创建Consumer
可以使用lambda表达式创建Consumer。
例1 基础范例操纵
在我们的示例中,我们将使用lambda表达式在此处创建两个Consumer。
一个用于将数字添加到列表的方法,如果数字为奇数,则将添加到具有奇数的列表中;如果数字为偶数,则将其添加到具有偶数的另一个列表中。
ConsumerLambda1.java- import java.util.ArrayList;
- import java.util.List;
- import java.util.function.Consumer;
- public class ConsumerLambda1 {
- public static void main(String[] args) {
- List<Integer> oddList = new ArrayList<>();
- List<Integer> evenList = new ArrayList<>();
-
- Consumer<Integer> storeNumber = n -> {
- if (n % 2 == 0) {
- evenList.add(n);
- } else {
- oddList.add(n);
- }
- };
-
- Consumer<List<Integer>> printList = list -> list.forEach(n -> System.out.println(n));
-
- storeNumber.accept(10);
- storeNumber.accept(15);
- storeNumber.accept(25);
- storeNumber.accept(30);
-
- System.out.println("--- Odd number ---");
-
- printList.accept(oddList);
-
- System.out.println("--- Even number ---");
-
- printList.accept(evenList);
- }
- }
复制代码 输出结果- --- Odd number ---
- 15
- 25
- --- Even number ---
- 10
- 30
复制代码 例2 对象范例操纵
我们将使用lambda表达式创建一个Consumer,它将决定并显示一个公民在推举中是否可以投票的数据。
ConsumerLambda2.java- import java.util.function.Consumer;
- public class ConsumerLambda2 {
- public static void main(String[] args) {
- Consumer<Citizen> electionConsumer = c -> {
- if (c.getAge() < 18) {
- System.out.println(c.getName() + " is not eligible to vote.");
- } else {
- System.out.println(c.getName() + " can vote.");
- }
- };
-
- electionConsumer.accept(new Citizen("Ritesh", 15));
-
- electionConsumer.accept(new Citizen("Shreya", 20));
- }
- }
- class Citizen {
- private String name;
- private int age;
- public Citizen(String name, int age) {
- this.name = name;
- this.age = age;
- }
- public String getName() {
- return name;
- }
- public int getAge() {
- return age;
- }
- }
复制代码 输出结果- Ritesh is not eligible to vote.
- Shreya can vote.
复制代码 使用方法引用创建Consumer
Consumer可以使用方法引用来创建。
在我们的例子中,我们有一个有两个方法的实用类Utility,其中一个方法将替换Map中的值,第二个方法显示Map中的数据。我们将使用方法引用来创建Consumer。
ConsumerMethodRef.java- import java.util.HashMap;
- import java.util.Map;
- import java.util.function.Consumer;
- public class ConsumerMethodRef {
- public static void main(String[] args) {
- Map<Integer, String> persons = new HashMap<Integer, String>();
- persons.put(101, "Mahesh");
- persons.put(102, "Krishna");
- Consumer<Map<Integer, String>> updatePersons = Utility::updateData;
- Consumer<Map<Integer, String>> displayPersons = Utility::displayData;
- updatePersons.accept(persons);
- displayPersons.accept(persons);
- }
- }
- class Utility {
- static void updateData(Map<Integer, String> persons) {
- persons.replaceAll((k, v) -> "Shree ".concat(v));
- }
- static void displayData(Map<Integer, String> persons) {
- for (Map.Entry<Integer, String> entry : persons.entrySet()) {
- System.out.println(entry.getKey() + " - " + entry.getValue());
- }
- }
- }
复制代码 输出结果- 101 - Shree Mahesh
- 102 - Shree Krishna
复制代码 使用andThen方法
在Java文档中andThen方法声明。
[code]default Consumer andThen(Consumer
|