一、集合的流式处理
在JDK8以后,提供对集合的流式操作,对集合的元素可以向“流水”一样,依次方便,遍历,排序等,它是“不可逆的”(访问后面元素之后不能再次返回前面元素 ) , 根据流的处理方式不同,可以分为 串行流和并行流, 串行流表示同一时间只能有一个流式操作,而并行流可以有多个流式操作。
流返回的结果包括中间操作和 最终操作
中间操作:它的返回值依然是 流对象 ,例如 排序、过滤、去重
最终操作: 返回值是特定的结果类型 ,例如 遍历,取最大值,最小值或返回新的集合
常用方法:
stream() :将一个集合流式化
filter(): 按条件过滤,里面使用lambda表达式
sort(): 排序集合元素
distinct: 过滤重复元素
reduce() : 将集合的所有元素累加或拼接
map(); 映射一个新的集合 对集合元素变更输出
collect():返回一个新集合
max() min():返回集合最大值或最小值
get (): 获取集合计算的结果
public static void main(String[] args) {
List<Integer> list = new ArrayList();
for(int i = 0 ;i<7;i++){
list.add(i+1);
}
// 1、过滤 filter() 过滤掉偶数
list.stream().filter( param ->param%2==1 )
.forEach(System.out::println); //遍历元素
// 2、排序 sort() 降序
list.stream().sorted((o1,o2)->o2-o1).forEach(System.out::println);
// 3 map() 映射一个新的集合 , 如果是奇数 输出奇数 ,否则偶数
list.stream().map(
param -> param%2==1?"这个元素是奇数":"这是偶数"
).forEach(System.out::println);
list.add(1);
list.add(1);
System.out.println("去重元素");
// 4 distinct() 去除重复元素
list.stream().distinct().forEach(System.out::println);
// 5 reduce() 将集合的所有元素 累加(或拼接)
int sum = list.stream().reduce((o1,o2)->o1+o2).get();
System.out.println("总和:"+sum);
// 6 collect 返回一个新的集合
List<Integer> list2= list.stream().filter(param->param%2==1).collect(Collectors.toList());
System.out.println("遍历新集合");
list2.stream().forEach(System.out::println);
// 7、最大和最小
int max = list2.stream().max((o1,o2)->o1-o2 ).get();
System.out.println("最大值:"+max);
int min = list2.stream().min((o1,o2)->o1-o2 ).get();
System.out.println("最小值:"+min);
}