码迷,mamicode.com
首页 > 编程语言 > 详细

Java8 新方法之 Stream(一)

时间:2015-03-09 22:30:30      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:java

Java8中的steram仅仅代表着数据流,与InputStreamOutPutStream是完全不同的概念。这里的stream是对集合(collection)功能的增强,更专注于对集合对象的各种便利、高效的聚合,大批量数据操作。


collec()函数

stream返回的元素拼成ArrayList参数为Collectros接口,提供极大的便利

 <R, A> R collect(Collector<? super T,A, R> collector);

解析:函数为泛型方法

参数为泛型约束,只能是某一类型的父类


         参数Colector接口

除了toList(),toSet(),toMap(),还有joing()拼接字符串,groupingby等方法

   

        Colector方法 groupingBy基本分组

使用:我们用groupingBy方法将人群按年龄分组

Map(Integer,List<Person>)personAge=people.stream().collect(collectros.groupingBy(Person::getAge));

Person::getAge为方法引用,返回某个属性的值。这里看起来横向C++的函数作用域呀。其实groupingBy()接受一个lambda表达式

collect(Collectors.groupingBy(p->p.getAge))

gruoppingBy有多种重载,其中一个是带有收集器的,将分组的数据按指定条件收集


      groupingBy 选择分组

使用:我们将分组的数据,只获取其中的名称

Map(Integer,List<string> nameofAge=people.stream().collect(groupingBy(Person::getAge,Mapping(Person::getName,toList())));
System.out.println("People grouped by age: " + nameOfPeopleByAge);

解析:两个参数:第一个是年龄,分组条件,第二个是收集期,mapping函数返回结果,mapping连个参数,分别是映射的属性和收集到的地方,如listset

输出的结果为

People grouped byage: {35=[Greg], 20=[John], 21=[Sara, Jane]}

小结:

通过查看源码我们发现groupingBy的参数为function<T,R>函数接口,该函数的操作是接收参数为T,返回R类型的操作,说白了就是一个func的泛型委托,参数为T,返回为T,和NET中的func是一个效果,很大程度上简化了代码书写度

 

Java8 新方法之 Stream(一)

标签:java

原文地址:http://blog.csdn.net/han_yankun2009/article/details/44159473

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!