美文网首页Java8
lambda表达式

lambda表达式

作者: 小鱼嘻嘻 | 来源:发表于2018-05-13 19:17 被阅读4次

    什么是lambda 表达式?

    lambda 表达式主要是将之前面向对象的传递数据思想改变为传递行为.

    lambda 表达式的好处有哪些?

    • 匿名
      这里所谓的匿名不是向Java8之前的匿名,而是表达的意思是写得少而想的多
    • 函数
      我们说它是函数是因为lambda函数不像方法那样属于某个特定的类,但和方法一样,lambda有参数列表,函数主体,返回类型,还有可能抛出异常列表
    • 传递
      lambda表达式可以作为参数传递给方法
    • 简洁
      无需向匿名类那样写很多模板方法

    lambda 表达式结构

    (args) -> {code segment}

    函数式接口

    public interface Predicate<T> {
        boolean test(T t);
    }
    

    一言以蔽之,函数式接口就是只定义一个抽象接口的方法.类似的有 runnable,callable,comparator 等等
    函数式接口可以干什么呢?
    lambda表达式允许你以内联的形式为函数式接口的抽象方法提供实现,并把整个表达式作为函数式接口的实例.

    @FunctionalInterface
    当某个接口加上FunctionalInterface标识,表示这个接口会设计成函数式接口

    @FunctionalInterface
    public interface Function<T, R> {
        R apply(T t);
    }
    @FunctionalInterface
    public interface Predicate<T> {
        /**
         * @param t
         * @return
         */
        boolean test(T t);
    }
    public static void main(String[] args) {
            List<Integer> filter = filter(Arrays.asList(1, 2, 3, 4, 5), i -> i > 3);
            filter.forEach(integer -> System.out.println(integer));
            List<Integer> map = map(Arrays.asList(1, 2, 3, 4, 5), i -> i * 2);
            map.forEach(i -> System.out.println(i));
        }
    
        /**
         * @param list
         * @param predicate
         * @param <T>
         * @return
         */
        public 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;
        }
    
        /**
         *
         * @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> result = new ArrayList<>();
            for (T t : list) {
                result.add(function.apply(t));
            }
            return result;
        }
    

    方法引用

    在我看来方法引用并没有什么用处,只是让你的代码更简洁,但是阅读起来我觉得不是很好理解,可能因人而异,所以我不太喜欢使用方法引用.

    相关文章

      网友评论

        本文标题:lambda表达式

        本文链接:https://www.haomeiwen.com/subject/ajaldftx.html