Java 8经常使用的流操做

如下都是我从《java 8函数式编程》看到的,
collect(toList())
collect(toList())方法是由stream里面的值生成的一个列表,是一个及早求值的操做。
List<Integer> list = Stream.of(1,2,3,4,5,).collect(Collectors.toList());java

assertEquals(Arrays.asList(1,2,3,,4,5),List);
上面 程序讲述的是从Stream中生成一个列表。不少Stream操做都是惰性求值,所以调用Stream上一个系列的方法以后,还须要最后调用一个相似collect的及早求值方法。git

map
假设函数能够将一种类型的值转换成另一种类型,map操做就可使用该函数,将流中的值转换成一个新的流,如map将字符串转换为大写形式
List<String> collect = Stream.of("a","b","hello").map(String->string.toUpperCase()).collect(toList());编程

assertEqual(asList("A","B","HELLO"),collect);
传给map的Lambda表达式只接受一个String类型的参数,返回一个新的string。参数和返回值没必要属于同一种类型,可是lambda表达式必须是Function接口的一个实例。ide

filter
遍历数据并检查其中的元素时,可尝试使用stream提供新的方法
以往咱们都是循环遍历列表,使用条件语句作判断。这能够被称为filter模式。
List<String> beginningWithNumbers = Stream.of("a","1abc","abc1").filter(value->isDigit(value.charAt(0)))
.collect(toList());
filter也是接受一个函数做为参数,该函数用Lambda表达式表示。函数式编程

flatMap
flatMap方法能够用Stream替换值,而后将多个Stream链接成一个Stream。Map操做是用一个新的值代替Stream中的值。可是,用户但愿让map操做有点不同,生成一个新的Stream对象来替换。用户不但愿结果是一连串的流,此时flatMap最能派上用场。
List<Integer> together = Stream.of(asList(1,2),asList(3,4)).flatMap(number ->numbers.stream()).collect(toList());
assertEquals(asList(1,2,3,4),together);
调用stream方法,将每一个列表转换成stream对象,其他部分由flatMap方法处理。flatMap方法的相关函数接口和map的方法同样,都是Functio接口,只是方法的返回值限定为Stream类型。函数

max和min
Stream上经常使用的操做之一就是求最大值和最小值。Stream API中的max和min操做足以解决这一问题。
Stream查找最短曲目
List<Track> tracks = asList(new Track("Bakai",524),
new Track("Violets for Your Furs",378),
new Track("Time Was",451));对象

Track shortestTrack = track.stream().min((Comparator.comparing(track ->track.getLength())).get();排序

assertEquals(tracks.get(1),shortestTrack);
查找Stream中的最大或最小元素,首先考虑排序的指标。为了让Stream对象按照曲目长度进行排序,须要传给他一个comparator对象。java8 提供一个新的静态方法compaing,使用它能够方便地实现一个比较器。接口

相关文章
相关标签/搜索