1. 使用consumer
接口
在Java8
中引入了一个函数式接口Consumer
的对象,该对象可以把方法作为参数进行传递。
接口定义:
@FunctionalInterfacepublic interface Consumer<T> {void accept(T t);default Consumer<T> andThen(Consumer<? super T> after) {Objects.requireNonNull(after);return (T t) -> { accept(t); after.accept(t); };}}
该接口接收一个泛型参数T
,然后可以自定义实现Consumer
接口中的accept
方法来对T
进行一系列的操作,该方法没有返回值。
示例:
void testConsumer(Integer id, Consumer consumer, String msg){consumer.accept(msg);}public static void main(String[] args){testConsumer(System.out::println, "consumer接口测试...");testConsumer(x -> {x = StringUtils.join(x,String.valueof(x).length());System.out.println(x);}, "consumer接口测试...")}# 输出结果接口测试...接口测试...15
其实,主要是理解Consumer
消费者,就可以了~主要是对入参做一些列的操作,在stream
里,主要是用于forEach
;内部迭代的时候,对传入的参数,做一系列的业务操作,没有返回值;
这个接口,只有一个默认方法,看下注释内容,就清楚用法了,就不在写案例解释了
/**传入一个Consumer类型的参数,*他的泛型类型,*跟本接口是一致的T,先做本接口的accept操作,*然后在做传入的Consumer类型的参数的accept操作*/default Consumer<T> andThen(Consumer<? super T> after) {Objects.requireNonNull(after);return (T t) -> { accept(t); after.accept(t); };}
2. 基于lambda
表达式
示例:
public class TestClass {interface TestFunction<T>{boolean getBooleanValue(T t);}static class Student{String name;Double score;Student(String name, Double score) {this.name = name;this.score = score;}Double getScore() {return score;}}static <T> void printMsg(T obj, TestFunction<T> function){if(function.getBooleanValue(obj)){System.out.println("result is true");}else{System.out.println("result is false");}}public static void main(String[] args) {printMsg(new Student("张三",92.5),x->{return x.getScore().compareTo(90d) > 0;});printMsg(new Student("张三",80.5),x->{return x.getScore().compareTo(90d) > 0;});}}# 输出结果result is trueresult is false
3. 参考
/qq_28410283/article/details/80618456/qq_44964202/article/details/114992507如果觉得《java中将方法当作参数传递的方式》对你有帮助,请点赞、收藏,并留下你的观点哦!