Stream的作用
结合了Lambda表达式,简化集合、数组的操作
Stream的使用流程
① 先得到一条Stream流(流水线),并把数据放上去
主要方法:
获取方式 | 方法名 | 说明 |
---|---|---|
单列集合 | 集合名.stream() | Collection中的默认方法 |
双列集合 | 无 | 无法直接使用stream流,可以先转成单例 |
数组 | public static <\T> Stream<\T> stream(T[] array) | Arrays工具类中的静态方法 |
一堆零散数据 | public static <\T> Stream<\T> of(T…values) | Stream接口中的静态方法 |
② 使用中间方法对流水线上的数据进行操作
主要方法
filter():过滤 ,limit():获取前几个元素,skip():跳过前几个元素
distinct():元素去重,concat():合并两个stream流,map():转换流中的数据类型
注意事项
1.中间方法,返回新的Stream流,原来的Stream流只能使用一次,建议使用链式编程
2.修改Stream流中的数据,不会影响原来集合或者数组中的数据
③ 使用终结方法对流水线上的数据进行操作
主要方法
名称 | 说明 |
---|---|
void forEach() | 遍历 |
long count() | 统计 |
toArray() | 收集流中的数据,放到数组中 |
collect(Collector collector) 示例:collect(Collector.toList)、collect(Collector.toSet)、collect(Collector.toMap) | 收集流中的数据,放到集合中 |
几个案例演示
案例一:
数据过滤 过滤奇数,保留偶数 并将结果保存下来
代码演示:
package com.liming.stream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
public class Demo02 {
public static void main(String[] args) {
/*
* 数据过滤
* 过滤奇数,保留偶数
* 并将结果保存下来
* */
//定义集合,添加数据
ArrayList<Integer> list = new ArrayList<>();
Collections.addAll(list, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
//过滤并保存数据
List<Integer> newList = list.stream()
.filter(i -> i % 2 == 0)
.collect(Collectors.toList());
System.out.println(newList);
}
}
案例二:
创建一个ArrayList集合,并添加以下字符,字符串前面是姓名,后面是年龄
“zhangsan,23”
“lisi,24”
“wangwu,25”
保留年龄大于等于24的人,并将结果收集到Map集合中,姓名为键,年龄为值
代码演示:
package com.liming.stream;
import java.util.ArrayList;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
public class Demo03 {
public static void main(String[] args) {
/*
* 创建一个ArrayList集合,并添加以下字符,字符串前面是姓名,后面是年龄
* "zhangsan,23"
* "lisi,24"
* "wangwu,25"
* 保留年龄大于等于24的人,并将结果收集到Map集合中,姓名为键,年龄为值
* */
ArrayList<String> list = new ArrayList<>();
list.add("zhangsan,23");
list.add("lisi,24");
list.add("wangwu,25");
//Collectors.toMap(键的规则,值的规则)
/*list.stream()
.filter(s -> Integer.parseInt(s.split(",")[1]) >= 24)
.collect(Collectors.toMap(new Function<String, String>() {
@Override
public String apply(String s) {
return s.split(",")[0];
}
}, new Function<String, Integer>() {
@Override
public Integer apply(String s) {
return Integer.parseInt(s.split(",")[1]);
}
}));*/
//lambda表达式简写
Map<String, Integer> map = list.stream()
.filter(s -> Integer.parseInt(s.split(",")[1]) >= 24)
.collect(Collectors.toMap(
s -> s.split(",")[0],
s -> Integer.parseInt(s.split(",")[1])));
System.out.println(map);
}
}