zoukankan      html  css  js  c++  java
  • jdk8-Lambda简介

    为什么使用Lambda

    Lambda可以使表达更加简洁,jdk8之前要想向方法传入一个函数逻辑,不得不去实现一个接口,jdk8带来的Lambda表达式可以将函数作为参数直接传入方法内(至少看起来是这样)。

    说起Lambda在jdk8中强大,就不得不提jdk8带来的Stream API,Stream API分为中间操作和终端操作,

    常用的中间操作包括:filter(过滤), map(映射,比如将某个对象映射为其唯一ID), distinct(使用equals去重), sorted(使用Comparator排序), skip(跳过n个), limit(限制最大个数n)

    常用的终端操作包括:

    1. forEach(遍历), toArray(返回数组), collect(将处理好的流收集到一个容器中,比如List), reduce(聚合), count, min(使用Comparator取最小), max
    2. findFirst, findAny, anyMatch, allMatch, noneMatch

    函数接口

    1 @FunctionalInterface
    2 public interface Comparator<T> {
    3   int compare(T o1, T o2);
    4   boolean equals(Object obj);
    5   //other methods ...
    6 }

    Comparator就是一个函数接口,所谓函数是指只有一个有效抽象方法的接口,这里的有效抽象方法不包括Object中的方法,任何一个只有一个有效抽象方法的接口都可以作为函数接口使用,即便没有被@FunctionalInterface注解。

    函数接口是如何工作的呢?

    1 List<String> list = new ArrayList<>();
    2 //add elements ...
    3 list.stream().filter(p -> p.length() > 3);

    filter的入参是一个Predicate函数接口,该函数接口有一个抽象方法test,可以将filter(Predicate predicate)看成是如下处理

     1 Stream<T> filter(Predicate<? super T> predicate){
     2     for (each string in stream){
     3          if(predicate.test(string)){
     4              keep the string
     5          }else{
     6              drop the string
     7          }
     8  
     9     return stream;
    10 }
  • 相关阅读:
    stack的基本使用方式
    洛谷 P2356 弹珠游戏
    关于字符串数组的一些操作
    递归分解因数
    筛法求素数模板
    世界顶级精英们的人生哲学!(转)
    Oracle 中重新编译无效的存储过程, 或函数、触发器等对象(转)
    由于没有安装音量控制程序,WINDOWS无法在任务栏上显示音量控制(转)
    Maximo(转)
    oracle 中nvl和sql server中isnull功能一样的
  • 原文地址:https://www.cnblogs.com/holoyong/p/7512958.html
Copyright © 2011-2022 走看看