• 函数式接口的使用


    import java.util.ArrayList;
    import java.util.List;
    import java.util.function.Consumer;
    import java.util.function.Function;
    import java.util.function.Predicate;
    
    public class FunctionTest {
    
        /**
         * Predicate
         * java.util.function.Predicate<T>接口定义了一个名叫test的抽象方法,它接受泛型 T对象,并返回一个boolean。
         * 如果你去查Predicate接口的Javadoc说明,可能会注意到诸如and和or等其他方法。现在 你不用太计较这些,我们会在3.8节讨论
         * @param list
         * @param predicate
         * @param <T>
         * @return
         */
        public static <T> List<T> filter(List<T> list, Predicate<T> predicate){
            List<T> results = new ArrayList<>();
            for (T t : list) {
                if (predicate.test(t)){
                    results.add(t);
                }
            }
            return results;
        }
    
        /**
         * Consumer
         * java.util.function.Consumer<T>定义了一个名叫accept的抽象方法,它接受泛型T 的对象,没有返回(void)。
         * 你如果需要访问类型T的对象,并对其执行某些操作,就可以使用 这个接口。
         * List的forEach的的底层其实用到了 Consumer 这个函数式接口
         * @param list
         * @param consumer
         * @param <T>
         */
        public static <T> void forEachPrint(List<T> list, Consumer<T> consumer){
            for (T t : list) {
                consumer.accept(t);
            }
        }
    
        /**
         * java.util.function.Function<T, R>接口定义了一个叫作apply的方法,它接受一个 泛型T的对象,并返回一个泛型R的对象。
         * 如果你需要定义一个Lambda,将输入对象的信息映射 到输出,就可以使用这个接口。
         * @param list
         * @param function
         * @param <T>
         * @param <R>
         * @return
         */
        public static <T,R> List<R> map(List<T> list, Function<T,R> function){
            List<R> results = new ArrayList<>();
            for (T t : list) {
                R apply = function.apply(t);
                results.add(apply);
            }
            return results;
        }
    
    
    
        public static void main(String[] args) {
            /**
             *  Predicate的使用
             */
            List<String> list = new ArrayList<>();
            List<String> filter = FunctionTest.filter(list, (s -> !s.trim().isEmpty()));
    
            /**
             * Consumer的使用,打印还可以直接使用第二种方式
             */
            FunctionTest.forEachPrint(list,s -> {
                System.out.println(s);
            });
            FunctionTest.forEachPrint(list,System.out::println);
    
            /**
             * Function的使用
             * 输入字符串,得到字符串的长度
             */
            List<Integer> map = FunctionTest.map(list, s -> s.length());
            
        }
    
    }

    来源:《java8实战》

  • 相关阅读:
    redis 下载安装
    Docker之网络
    容器与镜像
    Docker之容器
    Docker之镜像
    在安装完windows和linux双系统后,删除BIOS中的引导启动项在Window下
    Ububtu 18.04中如何在火狐浏览器中安装flash插件
    lambda 表达式
    IDEA DeBug mode
    spring 系统启动加载的类
  • 原文地址:https://www.cnblogs.com/Guhongying/p/15247228.html
Copyright © 2020-2023  润新知