Stream流常用API
Stream流的常用API(中间操作方法)
名称 | 说明 |
---|---|
filter(Predicate<? super T> predicate) | 用于对流中的数据进行过滤。 |
limit(long maxSize) | 获取前几个元素 |
skip(long n) | 跳过前几个元素 |
distinct() | 去除流中重复的元素。依赖(hashCode和equals方法) |
concat(Stream a, Stream b) | 合并a和b两个流为一个流 |
filter方法: 用于对流中的数据进行过滤
public static void main(String[] args) {
List<String> list = new ArrayList<>();
Collections.addAll(list, "张无忌", "赵敏", "周芷若", "张三丰", "张三");
// 对Stream流中的数据进行过滤, 过滤后会返回一个新的Stream流
Stream<String> st = list.stream().filter(s -> s.startsWith("张"));
// 对过滤后的Stream流进行遍历输出
st.forEach(s -> System.out.println(s));
}
中间方法也称为非终结方法,调用完成后返回新的Stream流可以继续使用,支持链式编程。
public static void main(String[] args) {
List<String> list = new ArrayList<>();
Collections.addAll(list, "张无忌", "赵敏", "周芷若", "张三丰", "张三");
// 对Stream流中的数据进行过滤
list.stream().filter(s -> s.startsWith("张")).forEach(s -> System.out.println(s)); // 张无忌 张三丰 张三
}
limit: 获取前几个元素
public static void main(String[] args) {
List<String> list = new ArrayList<>();
Collections.addAll(list, "张无忌", "赵敏", "周芷若", "张三丰", "张三");
// 获取前两个元素
list.stream().limit(2).forEach(s -> System.out.println(s)); //张无忌 赵敏
}
skip: 跳过前几个元素
public static void main(String[] args) {
List<String> list = new ArrayList<>();
Collections.addAll(list, "张无忌", "赵敏", "周芷若", "张三丰", "张三");
// 跳过前三个元素
list.stream().skip(3).forEach(s -> System.out.println(s)); // 张三丰 张三
}
distinct: 去除重复元素
public static void main(String[] args) {
List<String> list = new ArrayList<>();
Collections.addAll(list, "张无忌", "张无忌", "赵敏", "周芷若", "周芷若", "张三丰", "张三");
list.stream().distinct().forEach(s -> System.out.println(s)); // 张无忌 赵敏 周芷若 张三丰 张三
}
concat: 合并a, b为一个流
public static void main(String[] args) {
List<String> list1 = new ArrayList<>();
Collections.addAll(list1, "aaa", "bbb", "aaa");
List<String> list2 = new ArrayList<>();
Collections.addAll(list2, "ccc", "ddd", "ccc");
Stream<String> a = list1.stream();
Stream<String> b = list2.stream();
Stream<String> c = Stream.concat(a, b);
c.forEach(s -> System.out.println(s)); // aaa bbb aaa ccc ddd ccc
}
扩展API: map加工方法
public static void main(String[] args) {
List<String> list = new ArrayList<>();
Collections.addAll(list, "张无忌", "张无忌", "赵敏", "周芷若", "周芷若", "张三丰", "张三");
list.stream().map(s -> "金庸小说-" + s).forEach(s -> System.out.println(s));
// 打印结果:
// 金庸小说-张无忌
// 金庸小说-张无忌
// 金庸小说-赵敏
// 金庸小说-周芷若
// 金庸小说-周芷若
// 金庸小说-张三丰
// 金庸小说-张三
}
注意:
在Stream流中无法直接修改集合、数组中的数据, 也就是说操作Stream流不会影响原来的数组或集合。
Stream流的常见终结操作方法:
名称 | 说明 |
---|---|
forEach(Consumer action) | 对此流的每个元素执行遍历操作 |
long count() | 返回此流中的元素数 |
注意:终结操作方法,调用完成后流就无法继续使用了,原因是不会返回Stream了。