Java8新特性 Stream API

Java8新特性——StreamAPI

java8--List转为Map、分组、过滤、求和等操作


为什么不在集合类实现这些操作,而是定义了全新的Stream API?Oracle官方给出了几个重要原因:

一是集合类持有的所有元素都是存储在内存中的,非常巨大的集合类会占用大量的内存,而Stream的元素却是在访问的时候才被计算出来,这种“延迟计算”的特性有点类似Clojure的lazy-seq,占用内存很少。

二是集合类的迭代逻辑是调用者负责,通常是for循环,而Stream的迭代是隐含在对Stream的各种操作中,例如map()。


流的操作过程

使用流一共需要三步:

1、准备一个数据源

2、执行中间操作

中间操作可以有多个,它们可以串连起来形成流水线。

3、执行终端操作

执行终端操作后本次流结束,你将获得一个执行结果。


使用函数

准备数据源  List使用list.stream()  数组使用Arrays.stream(array)  值对象使用Stream.of("chaimm","peter","john")

中间操作 filter distanct skip map flatMap reduce max min 

终端操作 collect(toList())  collect(toSet())


一些常见操作

albums.stream()

.flatMap(album -> album.getTracks())

.filter(track -> track.getLength() > 60)

.map(track -> track.getName())

.collect(toSet());


filter(value -> isDigit(value.charAt(0)))

min(Comparator.comparing(track -> track.getLength()))

reduce(0, (acc, element) -> acc + element)


albums.collect(groupingBy(album -> album.getMainMusician()));

artists.collect(partitioningBy(Artist::isSolo));

String result =artists.stream().map(Artist::getName).collect(Collectors.joining(", ", "[", "]"));


简化ListToMap操作

Map ListToMap(List> list)

{

return list.stream().collect(HashMap::New ,(m,v)->m.put( (String)v.get("name") , v.get("value")), HashMap::putAll);

}

你可能感兴趣的:(Java8新特性 Stream API)