Lambda8新特性入门

2020-07-26  本文已影响0人  秃秃少年小猪

在我们日常的开发过程中,避免不了会写一点简单的函数,比如说,将每个人的年龄乘以二返回,判断年龄是否大于18等等,若是每次碰到这种的问题,我们都去写一个函数的话,好像是有点麻烦的,但是在java8中,将这些函数全部封装了,大概分为如下四种

名称 描述 对应的方法 入参(类型) 出参(类型)
Function<S,T> 功能型 apply Y<S> Y(T)
Consumer<S> 消费者型 accept Y<S> N
Supplier<R> 申请型 get N Y<S>
Predicate<T> 判断型 test Y<T> Y<bool>

示例

Function

Function<String, Integer> function = s ->{
    return 1;
};
System.out.println (function.apply ("200"));

Consumer

Consumer<String> consumer = s -> {
    System.out.println (s + "22");
};
consumer.accept ("dasdsa");

Supplier

Supplier<String> supplier = () -> {
    return "wew";
};
System.out.println (supplier.get ());

Predicate

Predicate<String> predicate = s -> {
    return s.length () > 0;
};
System.out.println (predicate.test ("ewe"));

上述的这些看起来好像有点太简单了,那我们来点高级的吧

给出如下代码片段,打印出年龄>=18,性别是'',的人的id或者名字并返回一条

List<Student> studentList = new ArrayList<>();
        studentList.add(new Student(1, "张三", 10, "男"));
        studentList.add(new Student(2, "李四", 7, "男"));
        studentList.add(new Student(3, "西施", 20, "女"));
        studentList.add(new Student(4, "貂蝉", 18, "女"));

解题思路

优化版本

这里考虑通过上述的jdk提供的方法几种方法,具体的代码如下

        String studentName = studentList.stream()
                .filter(x -> x.getAge() >= 18)
                .filter(x -> "女".equals(x.getSex()))
                .map(Student::getName)
                .collect(Collectors.toList())
                .get(0);
        System.out.println(studentName);

代码经过一番改造,比起之前的版本要规整(优雅)了很多,在后续的代码中我们可以经常性的使用这种流式编程,可以大大的简单我们代码可读性。

在上述的几个函数中,分别接受如下的几个参数类型

public final Stream<P_OUT> filter(Predicate<? super P_OUT> predicate)
public final <R> Stream<R> map(Function<? super P_OUT, ? extends R> mapper)

以上就是这次分享的内容,欢迎大家一起交流与探讨~~~

上一篇 下一篇

猜你喜欢

热点阅读