Java 中的 Consumer
接口是一个函数式接口,它接受一个输入参数,并且不返回任何结果。Consumer
接口通常用于对某个对象或值进行处理,例如打印日志、修改对象属性等场景。
下面是 Consumer
接口的基本用法:
-
定义接口对象:
Consumer<String> consumer = (str) -> System.out.println(str);
这个示例代码定义了一个
Consumer
接口对象,它接受一个字符串类型的参数,并将其打印到控制台上。 -
使用接口对象:
consumer.accept("hello, world");
在这个示例代码中,我们通过调用
accept()
方法来将一个字符串传递给Consumer
接口对象。注意,accept()
方法只有一个参数,因此在这个示例代码中需要传递一个字符串类型的参数。输出结果为hello, world
。
Consumer
接口还可以使用方法引用(Method Reference)来简化代码,例如:
Consumer<String> consumer = System.out::println;
这行代码等价于上面的示例代码,将 System.out.println
方法作为 Consumer
接口对象的实现。可以看到,使用方法引用可以使代码更加简洁和易读。
Consumer
接口还可以和其它函数式接口一起使用,例如 Predicate
、Function
等,以实现复杂的业务逻辑。下面是几个示例:
-
遍历集合:
List<String> list = Arrays.asList("apple", "banana", "cherry"); Consumer<String> consumer = (str) -> System.out.println(str); list.forEach(consumer); // 打印所有元素
这个示例代码使用
Consumer
接口遍历一个字符串列表,并将每个元素打印到控制台上。 -
修改对象属性:
List<Person> persons = Arrays.asList(new Person("Alice"), new Person("Bob"), new Person("Charlie")); Consumer<Person> consumer = (person) -> person.setName(person.getName().toUpperCase()); persons.forEach(consumer); // 将所有姓名转换成大写
这个示例代码使用
Consumer
接口修改一个人物列表中每个人的姓名,将其转换成大写形式。注意,在这个示例代码中,我们将Consumer
接口作为参数传递给forEach()
方法,而不是像第一个示例代码一样直接调用。
总之,Consumer
接口是 Java 中非常实用的一个函数式接口,在处理需要对某个对象或值进行处理,但不需要返回结果的场景下特别有用。它可以和其它函数式接口一起使用,方便地实现复杂的业务逻辑。