之前一直用的jdk6,现在项目用上jdk8了,听说了很多的java 8 的特性,骚操作很多,赶紧来学习一番。
java 8中添加了一个新的抽象,叫做Stream流,据说可以极大提高程序员的生产力,使代码更加的简洁,干净,高效率。那么Stream到底是怎么使用的呢?
java 8中集合提供了2个方法来生成Stream,Stream()为集合创建串行流,parallelStream()为集合创建并行流。流常用的方法有,forEach(),map(),filter(),limit(),sorted(),collectors()方法等。那我们练习使用下这几个方法吧。
1.forEach()方法的使用:
List<Integer> list = Arrays.asList(1,2,4,5,7,9,10);
list.forEach(integer -> System.out.print(integer));
结果:1 2 4 5 7 9 10
从上面可以看出forEach()方法特别的简洁,一个遍历的功能,但是使用非常的方便。
2.filter()方法的使用:
List<Integer> list = Arrays.asList(1,2,4,5,7,9,10);
List<Integer> list2 = list.stream().filter(integer -> integer>2).collect(Collectors.toList());
list2.forEach(integer -> System.out.print(integer));
结果:4 5 7 9 10
filter()方法顾名思义就是过滤的作用,把list转换为流,然后过滤掉其中小于2的值,我们获得大于2的值,
现在可以明显看出,就一行代码就搞定了,简洁,干净。
3.map()方法的使用:
List<Integer> list = Arrays.asList(1,2,4,5,7,9,10);
List<Integer> list3 = list.stream().map(integer -> integer*integer).distinct().collect(Collectors.toList());
list3.forEach(integer -> System.out.print(integer));
结果:1 4 16 25 49 81 100
map()方法的作用就是用于映射每个元素到对应的结果,我们使用map输出了,每个元素的平方数。
4.limit()方法的使用:
Random random = new Random();
random.ints().limit(5).forEach(System.out::println);
结果:
1543413029
2109695956
1250657137
1882235781
360808744
limit()方法就是用于获取指定数量的数据,就和mysql的limit方法差不多的感觉。
5.sorted的使用;
Random random = new Random();
random.ints().limit(5).sorted().forEach(System.out::println);
结果:
-1628109474
-403572420
328861527
1602449996
1934258929
sorted()方法的作用就是排序,对我们生成的随机的5个数进行了排序处理。
6.Collectors
List<String> string = Arrays.asList("abc","def","hgk","");
List<String> filterString = string.stream().filter(s -> !s.isEmpty()).collect(Collectors.toList());
System.out.println("过滤列表:"+filterString);
String mergedString = string.stream().filter(s -> !s.isEmpty()).collect(Collectors.joining(","));
System.out.println("合并后的字符串:"+mergedString);
结果:
过滤列表:[abc, def, hgk]
合并后的字符串:abc,def,hgk
可以看出Collectors有合并字符串的功能,可以用于返回列表或者字符串。
大家了解了上面几个简单的例子后,是不是对Stream有了一个初步的了解呢?