JDK8 管道 Stream 详细使用介绍
Stream 的获取
① 通过集合Collection获取
List<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3,4,5));
Stream<Integer> stream = list.stream();
② 通过数组获取
String[] array = {"are","you","ok"};
Stream<String> stream = Arrays.stream(array);
//对于基本类型数组的处理
int[] array = {1,2,3,4,5};
Stream<Integer> stream = Arrays.stream(array).boxed();
//Arrays.stream(array)获取的是一个IntStream对象,boxed 方法用于将目前 Stream 中的基本类型装箱
③ 直接通过值获取
Stream<String> stream = Stream.of("are","you","ok");
Stream 常用管道操作
1) 筛选 filter
filter函数接收一个Lambda表达式作为参数,该表达式返回 boolean,在执行过程中,流将元素逐一输送给filter,并筛选出执行结果为 true 的元素;
//筛选出列表中的非空项
List<String> list = Arrays.asList("are","you","","ok");
List<String> filted = list.stream()
.filter(x-> !x.empty())
.collect(Collectors.toList());
2) 去重 distinct
//去除列表中的重复元素
List<String> list = Arrays.asList("are","you","you","ok");
List<String> distincted = list.stream()
.distinct()
.collect(Collectors.toList());
3) 截取 limit
截取流的前N个元素:
//获取Stream的前3个值
List<String> list = Arrays.asList("are","you","fucking","ok");
List<String> distincted = list.stream()
.limit(3);
.collect(Collectors.toList());
4) 跳过 skip
跳过流的前n个元素:
List<String> list = Arrays.asList("are","you","fucking","ok");
List<String> distincted = list.stream()
.skip(2);
.collect(Collectors.toList());
5) 映射 map
对流中的每个元素执行一个函数,使得元素转换成另一种类型输出。流会将每一个元素输送给map函数,并执行map中的Lambda表达式,最后将执行结果存入一个新的流中。
如:将 list 中每一个 Integer类型元素自增后转化为 String类型
/