看本篇博客前,建议先浏览下补充:Stream类中的collect方法和Collector/Collectors类;和 补充:Stream接口的sorted()方法,Comparator函数式接口效果展示;Comparator函数式接口;函数式接口严格规范;这两篇博客;
(1)Stream流式处理提供了很多方法,每一个方法有不同功能的功能,通过调用不同的方法,或者说通过不同的方法组合就可以得到一些复杂的运算操作。
(2)Stream流式处理的很多方法的参数,是函数式接口的实现,自然Lambda表达式就可以起很大作用了;
(3)Stream是个很给力的工具,在实际中尽量有意识的多多使用;代码简洁,效率高!
目录
案例1:提取集合中所有偶数并求和:mapToInt()方法,filter()方法,sum()方法;
(1)mapToInt()方法:将流中的数据转换成整数;只有将流中的数据转成int以后,才能对流中的数据进行计算处理;
(2)filter()方法:对流中的数据进行过滤,将符合条件的保留下来
(3)sum()方法:只有在整数类型的流中,才可以调用sum()方法,起作用是将stream流中的数据进行求和。
案例2:所有名字首字母大写:map()方法,forEach()方法;
(1)map()方法:作用是按照指定的规则对每一个流中的数据进行相应的转换;
(2)forEach()方法:对stream流中的所有数据做一个操作。。。本案例的操作是输出这个数据;
案例2(附加):所有名字首字母大写:最后有一个规约操作,得到一个最终结果。得到一个新的list集合;collect()方法;
(1)collect()方法:collect是收集的意思,可以将流中的每一个数据都包装成list或者set这样的集合并返回;
(2)sorted(Comparator comparator)方法:流中数据排序
案例1:提取集合中所有偶数并求和:mapToInt()方法,filter()方法,sum()方法;
package com.imooc.stream;
import org.junit.Test;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class StreamMethod {
/**
* 提取集合中所有偶数并求和
*/
@Test
public void case1() {
List<String> list = Arrays.asList("1", "2", "3", "4", "5","8");
int sum = list.stream() // 获取stream流对象
.mapToInt(s -> Integer.parseInt(s)) // mapToInt():这儿的作用是将流中的每一个数据转为整数
.filter(n -> n % 2 == 0) // filter()对流中的数据进行过滤,将符合条件的保留下来
.sum(); // 只有在整数类型的流中,才可以调用sum()方法,起作用是将stream流中的数据进行求和。
System.out.println(sum);
}
}
运行结果:
说明:
(1)mapToInt()方法:将流中的数据转换成整数;只有将流中的数据转成int以后,才能对流中的数据进行计算处理;
mapToInt()方法的参数要求是一个ToIntFunction函数式接口的实现,当然可以是对应的Lambda表达式;
其实并不难,遇到一个函数式接口,只需要三点:【明白这个接口的作用】【方法的输入值】【方法的返回值】;然后编写相应的Lambda表达式去实现接口进行啦!
(2)filter()方法:对流中的数据进行过滤,将符合条件的保留下来
(3)sum()方法:只有在整数类型的流中,才可以调用sum()方法,起作用是将stream流中的数据进行求和。
经过实际查找,在Stream接口中没有找到sum()方法;上面调用的sum()方法是定义在IntStream接口中的;