java8函数式接口Predicate、Consumer、Function

java8函数式接口Predicate、Consumer、Function

Laughing
2021-08-21 / 0 评论 / 1,038 阅读 / 搜一下 / 正在检测是否收录...
温馨提示:
本文最后更新于2024年03月16日,已超过384天没有更新,若内容或图片失效,请留言反馈。

java8在java.util.function包中给我们预留了几个泛型函数式接口。PredicateConsumerFunction

Predicate

接口里面有一个test方法,接口一个泛型T对象并返回一个boolean值。

 static <T> List<T> filter(List<T> list, Predicate<T> predicate) {
        List<T> result = new ArrayList<>();
        for (T t : list) {
            if (predicate.test(t)) {
                result.add(t);
            }
        }
        return result;
    }

传递一个String类型的列表,过滤掉其中为空的元素。

 List<String> list = new ArrayList<>();
        list.add("");
        list.add("one");
        List<String> result = filter(list,s->s.length()>0);
        for(String s:result){
            System.out.println(s);
        }

Consumer

接口里面定义了一个accept方法,接受一个泛型T对象,没有返回值。

 static <T> void consumer(List<T> list, Consumer<T> consumer) {
        for (T t : list) {
            consumer.accept(t);
        }
    }

输出列表元素。

 consumer(list, System.out::println);

Function

接口里面定义了一个apply方法,接受一个泛型T,并返回泛型R。

static <T,R> List<R> func(List<T> list, Function<T,R> fun){
        List<R> result = new ArrayList<>();
        for(T t:list){
            result.add(fun.apply(t));
        }
        return result;
    }

获取列表每个元素的长度。

List<Integer> lengthList=func(list, String::length);
        for(Integer integer:lengthList){
            System.out.println(integer);
        }
2

评论 (0)

取消