Java 8 Consumer示例
时间:2020-02-23 14:34:52 来源:igfitidea点击:
在本教程中,我们将看到Java 8消费者接口。
消费者是单个参数功能接口,如谓词,但它不会返回任何值。
由于消费者是功能接口,因此它可以用作Lambda表达式的分配目标。
消费者定义
Consumer
采用单一论点,不会返回任何结果。
这是定义 Consumer
接口。
@FunctionalInterface public interface Consumer<T> { /** * Performs this operation on the given argument. * * @param t the input argument */ void accept(T t); default Consumer<T> andThen(Consumer<? super T> after) { Objects.requireNonNull(after); return (T t) -> { accept(t); after.accept(t); }; } }
它具有一个功能性方法 accept()
和默认方法
andThen()
。
消费者的例子
accept()方法示例
让我们使用Consumer接口来打印字符串:
package org.igi.theitroad; package org.igi.theitroad; import java.util.function.Consumer; public class Java8ConsumerExample { public static void main(String[] args) { Consumer<String> consumerString=s->System.out.println(s); consumerString.accept("igi"); } }
我们创造了 consumer
目标所需的对象 String
对象作为输入和打印它。
它很简单地使用消费者接口来打印字符串。
默认 andThen()方法示例
根据java文档:返回a composed Consumer
按顺序执行此操作后跟后续操作。
如果执行任一操作抛出 exception
,它被转发到组成操作的呼叫者。
如果执行此操作抛出异常,则不会执行后操作之后。
package org.igi.theitroad; import java.util.function.Consumer; public class Java8ConsumerExample { public static void main(String[] args) { Consumer<String> firstC = x -> System.out.println(x.toLowerCase()); Consumer<String> secondC = y -> System.out.println(y.toUpperCase()); Consumer<String> result = firstC.andThen(secondC); result.accept("igi"); } }
正如我们所看到的,我们创建了两个消费者并使用过 andThen()
创建复合消费者的方法。
当我们调用的时候 accept()
复合消费者的方法,依次调用消费者。
消费者的Foreach示例
让我们说你有 Student
程序如下:
package org.igi.theitroad; public class Student { private int id; private String name; private String gender; private int age; public Student(int id, String name, String gender, int age) { super(); this.id = id; this.name = name; this.gender = gender; this.age = age; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student [id=" + id + ", name=" + name + ", gender=" + gender + ", age=" + age + "]"; } }
现在让我们在主类中创建消费者对象并将其传递给列表的forEach方法:
package org.igi.theitroad; import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; public class Java8ConsumerStudentExample { public static void main(String[] args) { List<Student> studentList = createStudentList(); //Creating Consumer for student object which will be used in forEach method of //list Consumer<Student> consumerForStudent = s -> System.out.println(s); studentList.forEach(consumerForStudent); } public static List<Student> createStudentList() { List<Student> studentList = new ArrayList<>(); Student s1 = new Student(1, "igi", "M", 19); Student s2 = new Student(2, "John", "M", 17); Student s3 = new Student(3, "Mary", "F", 14); Student s4 = new Student(4, "Martin", "M", 21); Student s5 = new Student(5, "Monica", "F", 16); Student s6 = new Student(6, "Ally", "F", 20); studentList.add(s1); studentList.add(s2); studentList.add(s3); studentList.add(s4); studentList.add(s5); studentList.add(s6); return studentList; } }
我们创建了所需的消费者对象 student
对象作为输入和打印。
上面创建的Confueer对象然后传递给 foreach()
可迭代接口的方法。
default void forEach(Consumer<? super T> action) { Objects.requireNonNull(action); for (T t : this) { action.accept(t); } }
正如我们所看到的,foreach()方法需要 consumer
作为输入和呼叫 accept()
在迭代的每个对象上的方法。