===========================================================================
- 什么是Stream流?
答:在java8中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream流概念,用于简化集合类库或者数据API的弊端
- Stream流能解决什么问题?
答:可以解决已有集合类库或者数据API的弊端,Stream流认为集合和数组操作的API很不好用,所以采用了Stream流简化集合和数据的操作
Stream流式思想的核心:
-
是先得到集合或者数组的Stream流(就是一根传送带)
-
然后就用这个Stream流操作集合或者数组的元素
-
然后用Stream流简化替代集合操作的API
集合获取流的API:
-
default Stream<E> stream()
-
集合获取Stream流用
stream()
public class StreamDemo01 {
public static void main(String[] args) {
/** --------------------Collection集合获取流------------------------------- */
// Collection集合如何获取Stream流。
Collection c = new ArrayList<>();
Stream ss = c.stream();
/** --------------------Map集合获取流------------------------------- */
Map<String, Integer> map = new HashMap<>();
// 先获取键的Stream流。
Stream keyss = map.keySet().stream();
// 在获取值的Stream流
Stream valuess = map.values().stream();
// 获取键值对的Stream流(key=value: Map.Entry<String,Integer>)
Stream<Map.Entry<String,Integer>> keyAndValues = map.entrySet().stream();
/** ---------------------数组获取流------------------------------ */
// 数组也有Stream流。
String[] arrs = new String[]{“Java”, “JavaEE” ,“Spring Boot”};
Stream arrsSS1 = Arrays.stream(arrs);
Stream arrsSS2 = Stream.of(arrs);
}
}
| forEach | count | filter | limit | skip | map | concat |
| — | — | — | — | — | — | — |
| 逐一处理(遍历) | 统计个数 | 过滤元素 | 取前几个元素 | 跳过前几个 | 加工方法 | 合并流 |
- map: 把原来的元素加工以后,重新放上去
public class StreamDemo01 {
public static void main(String[] args) {
List list = new ArrayList<>();
list.add(“张无忌”);
list.add(“周芷若”);
list.add(“赵敏”);
list.add(“张强”);
list.add(“张三丰”);
list.add(“张三丰”);
// 遍历出长度为3并且姓张的人
list.stream().filter( s -> s.length() == 3 ).filter( s -> s.startsWith(“张”))
.forEach( System.out::println);
// 统计数量
long count = list.stream().filter( s -> s.length() == 3 )
.filter( s -> s.startsWith(“张”)).count();
System.out.println(count);
// 取前2个
list.stream().filter(s -> s.length() == 3).limit(2)
.forEach( System.out::println);
// 跳过前2个
list.stream().filter(s -> s.length() == 3).skip(2)
.forEach( System.out::println);
}
}
-
终结方法:一旦Stream调用了终结方法,流的操作就全部终结了,不能继续使用了,只能创建新的Stream操作
-
终结方法:
foreach
count
-
非终结方法:每次调用完成以后返回一个新的流对象,可以继续使用,支持链式编程
public class StreamDemo {
public static void main(String[] args) {
List list = new ArrayList<>();
list.add(“张无忌”);
list.add(“周芷若”);
list.add(“赵敏”);
list.add(“张强”);
list.add(“张三丰”);
list.add(“张三丰”);
// foreach终结方法
list.stream().filter(s -> s.startsWith(“张”))
.filter(s -> s.length() == 3).forEach(System.out::println);
long count = list.stream().filter(s -> s.startsWith(“张”))
.filter(s -> s.length() == 3).count();
System.out.println(count);
}
}
总结
面试前的“练手”还是很重要的,所以开始面试之前一定要准备好啊,不然也是耽搁面试官和自己的时间。
我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。
面试题及解析总结
![三年Java开发,刚从美团、京东、阿里面试归来,分享个人面经](https://uploa
必看视频!获取2024年最新Java开发全套学习资料 备注Java
d-images.jianshu.io/upload_images/24613101-e2c433696a0f4db3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
大厂面试场景
知识点总结
itle-必看视频!获取2024年最新Java开发全套学习资料 备注Java)]
d-images.jianshu.io/upload_images/24613101-e2c433696a0f4db3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
大厂面试场景
[外链图片转存中…(img-9y6ZHozy-1716462122185)]
知识点总结
[外链图片转存中…(img-xTRjPcqN-1716462122186)]