美文网首页
JAVA 8 Lambda表达式

JAVA 8 Lambda表达式

作者: 84ed7ae0e2ba | 来源:发表于2016-03-31 19:11 被阅读69次

    lambda表达式

    组成的部分 :

    参数列表,箭头(->),以及一个表达式或者语句块

    表达式的类型:

    表达式的目标类型是“函数接口”,"函数接口",一个接口,如果只有一个显式声明的的抽象方法,他则可以认为一个函数接口。(可以用@FunctionalInterface 声明)

    jdk预定义的借口:Function:典型转换的 T类型->R类型。

    @FunctionalInterface
    public interface Function{
            R apply(T t);
    }

    Consumer:消费的,T->装成void的

    @FunctionalInterface
    public interface Consumer {
            void accept(T t);
    }

    Predicate:判断的,T -> boolean

    @FunctionalInterface
    public interface Predicate {
             boolean test(T t);
    }

    使用的场景:

    主要用于使用匿名类的地方。

    λ表达式与集合类批处理操作:stream流的概念

    for 循环 

    1.8之前

    for(Object o: list) { // 外部迭代
          System.out.println(o);
    }

    1.8版本

    list.forEach(new Consumer(t){
          System.out.println(t);
    });

    lambda 表达式的后

    list.forEach(t->System.out.println(t));

    stream 数据流

    就如同一个迭代器(Iterator),单向,不可往复,数据只能遍历一次,遍历过一次后即用尽了,就好比流水从面前流过,一去不复返

    stream的一些概念:

    Terminal操作:当这个操作执行后,流就被使用“光”了,一个流有且只有一个Terminal的操作,并且作为流的最终的操作的方法

    Intermediate操作:是惰性的操作,除非到了Terminal的操作,他采取一一的去执行

    常见的Terminal操作:

    map (mapToInt, flatMap 等)、 filter、 distinct、 sorted、 peek、 limit、 skip

    常见的Intermediate操作:

    forEach、 toArray、 reduce、 collect、 min、 max、 count

    stream的生成:

    list->Stream

    Stream stream=list.stream();
    System.out.println(stream.count());

    value->Stream

    Stream stream = Stream.of("a", "b", "c");

    arrays->stream

    String [] strArray = new String[] {"a", "b", "c"};
    // 1   stream = Stream.of(strArray);
    // 2  stream = Arrays.stream(strArray);

    stream的转化其它的值

    stream->Array

    String[] strArray1 = stream.toArray(String[]::new);

    stream->Collection

    List list1 = stream.collect(Collectors.toList());
    List list2 = stream.collect(Collectors.toCollection(ArrayList::new));
    Set set1 = stream.collect(Collectors.toSet());

    stream->String

    String str = stream.collect(Collectors.joining()).toString();

    Stream的常见api的说明:

    map:转化的 数据源的里面的参数的类型,stream<T> ->stream<R>标准的1对1,接收Function的接口

    flatMap:转化成数据的源所有的数据装成相应的stream,stream<List<T>>->stream<R>, 多对一或者一对一。接收Function的接口

    filter:过滤,里面是一个Predicate的接口,过滤满足条件的数据,接收Predicate的接口

    distinct:去重

    sorted:排序 ,接收Comparator的接口

    peek:?,接受一个Consumer的接口,对每一个数据做一些处理工作。

    limit:限制大小

    skip:跳过

    forEach:迭代

    toArray:转成array

    reduce:以第一个数据为种子,最后剪成最后一个

    collect:形成collection

    min:最小

    max:最大

    count:技术

    相关文章

      网友评论

          本文标题:JAVA 8 Lambda表达式

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