Stream API 万物皆可一行代码
Stream专门针对集合的各种操作提供各种非常便利,简单,高效的API,
Stream API主要是通过Lambda表达式完成,极大的提高了程序的效率和可读性,
同时Stram API中自带的并行流使得并发处理集合的门槛再次降低,使用Stream API编程无需多写
怎样使用Stream流?
1. 获取流--> 2. 对流进行操作-->3.结束对流的操作
获取流的方式
集合类可通过
Collection.stream()
或Collection.parallelStream()
获取流;数组可通过
Arrays.stream(T[] array)
或Stream.of()
转换。IO 相关流如
Files.walk()
或BufferedReader.lines()
也可生成流。
中间操作(Intermediate Operations)
中间操作返回新流,支持链式调用,操作延迟执行(lazy)。
映射操作
map
:元素一对一转换。List<String> names = students.stream() .map(Student::getName) .collect(Collectors.toList());
flatMap
:扁平化多维结构。List<String> words = lines.stream() .flatMap(line -> Arrays.stream(line.split(" "))) .collect(Collectors.toList());
过滤与去重
filter
:保留符合谓词的元素。List<Student> adults = students.stream() .filter(s -> s.getAge() > 18) .collect(Collectors.toList());
distinct
:去除重复元素(依赖equals
方法)。
排序与裁剪
sorted
:自然排序或自定义比较器。
在Java流(Stream) API中,sorted
方法用于对流中的元素进行排序操作。它支持两种重载形式,可以根据需要选择无参数或传入自定义比较器(Comparator
)。下面我将逐步解释其用法,并提供真实可靠的示例代码,帮助您理解如何高效实现排序。
1. 无参数sorted方法
- 当调用
sorted()
方法而不传递任何参数时,要求流中的元素必须实现Comparable<T>
接口。这适用于元素类已经定义了自然排序顺序的情况。 - 示例:如果元素类(如
S