美文网首页
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