Java8

lambda表达式

2018-05-13  本文已影响4人  小鱼嘻嘻

什么是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;
    }

方法引用

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

上一篇 下一篇

猜你喜欢

热点阅读