中间操作
(上一篇博客中也有部分 中间操作 )传送门
多个中间操作可以连接起来形成一个流水线,除非流水线上触发终止操作,否则中间操作不会执行任何处理!而在终止操作时一次性全部处理,称作“惰性求值”
map和flatMap
用例:将String集合中的每个元素转成字符然后打印
//得到一个 character 的stream
public static Stream<Character> filerStream(String str){
//建立一个list
List<Character> list = new ArrayList<Character>();
for (Character ch : str.toCharArray()) {
list.add(ch);
}
return list.stream();
}
map
接受lambda,将元素转换成其他形式或提取信息,接收一个函数作为参数,该函数将会被应用到每个元素上,并将其映射成一个新的元素。
//创建集合
List<String> list = Arrays.asList("jin","xiao","kun");
// map 的使用(这个通过方法引用得到的元素是Stream<character>类型)
Stream<Stream<Character>> stream = list.stream()
.map(MapDemo::filerStream);
stream.forEach((com) -> {
// com 是一个 Stream<character> 类型的变量
com.forEach(System.out::println);
});
flatMap:接受一个函数作为参数,将流中的每个值都换成另一个流,然后把所有的流连接成一个新的流
//得到集合
List<String> list = Arrays.asList("jin","xiao","kun");
// flatMap 的使用
list.stream()
.flatMap(MapDemo::filerStream)
.forEach(System.out::println);
注:
可将 map 和 flatMap 的关系,类比集合中 add 和 addAll 来进行理解
排序
自然排序
sort() : 按照元素已经实现的Comparable 进行排序
@Test
public void test2() {
//自然排序,按照元素实现的 Comparable 排序
String[] str2 = {"li","bin","qing","jin","xiao","kun"};
Arrays.stream(str2)
.sorted()
.forEach(System.out::println);
}
定制排序
sorted(Comparator) : 自行传递一个 Comparator 构造器进行排序
@Test
public void test() {
//sorted() 定制排序
//自己创建一个 comparator 比较器进行排序
employees.stream()
.sorted((e1,e2) -> {
if (e1.getAge() == e2.getAge()) {
return e1.getName().compareTo(e2.getName());
}else{
return e1.getAge() - e2.getAge();
}
})
.forEach(System.out::println);
}