// return result;
// }
// }
// ).forEach(s-> System.out.println(s));
//因为Predicate接口中只有一个抽象方法test
//所以我们可以使用lambda表达式来简化
// list.stream().filter(
// (String s)->{
// boolean result = s.startsWith(“张”);
// return result;
// }
// ).forEach(s-> System.out.println(s));
list.stream().filter(s ->s.startsWith("张")).forEach(s-> System.out.println(s));
}
}
**其他的中间操作方法**
![在这里插入图片描述](https://img-blog.csdnimg.cn/62efe87f10474bf883e6d0482fa727d7.png)
public class MyStream4 {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
list.add(“张三丰”);
list.add(“张无忌”);
list.add(“张翠山”);
list.add(“王二麻子”);
list.add(“张良”);
list.add(“谢广坤”);
list.add(“谢广坤”);
list.add(“谢广坤”);
list.add(“谢广坤”);
list.add(“谢广坤”);
//method1(list);
//method2(list);
//method3();
//method4(list);
}
private static void method4(ArrayList<String> list) {
// Stream<T> distinct():去除流中重复的元素。依赖(hashCode和equals方法)
list.stream().distinct().forEach(s-> System.out.println(s));
}
private static void method3() {
//static <T> Stream<T> concat(Stream a, Stream b):合并a和b两个流为一个流
ArrayList<String> list = new ArrayList<>();
list.add("张三丰");
list.add("张无忌");
list.add("张翠山");
list.add("王二麻子");
list.add("张良");
list.add("谢广坤");
list.add("谢广坤");
list.add("谢广坤");
list.add("谢广坤");
list.add("谢广坤");
ArrayList<String> list2 = new ArrayList<>();
list2.add("张三丰");
list2.add("张无忌");
list2.add("张翠山");
list2.add("王二麻子");
list2.add("张良");
list2.add("谢广坤");
// Stream stream1 = list.stream();
// Stream stream2 = list2.stream();
//
// Stream stream3 = Stream.concat(stream1, stream2);
// stream3.forEach(s-> System.out.println(s));
Stream.concat(list.stream(),list2.stream()).forEach(s-> System.out.println(s));//合并输出
}
private static void method2(ArrayList<String> list) {
// Stream<T> skip(long n):跳过指定参数个数的数据
list.stream().skip(2).forEach(s-> System.out.println(s));//跳过前面两个
}
private static void method1(ArrayList<String> list) {
// Stream<T> limit(long maxSize):截取指定参数个数的数据
list.stream().limit(2).forEach(s-> System.out.println(s));//保留前面两个
}
}
### 4、Stream流终结方法
![在这里插入图片描述](https://img-blog.csdnimg.cn/c7a8ef06b5214bd5ae9c7829bf398f76.png)
/**
* Stream流的终结方法
*/
public class MyStream5 {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
list.add(“张三丰”);
list.add(“张无忌”);
list.add(“张翠山”);
list.add(“王二麻子”);
list.add(“张良”);
list.add(“谢广坤”);
//method1(list);
// long count():返回此流中的元素数
long count = list.stream().count();
System.out.println(count);
}
private static void method1(ArrayList<String> list) {
// void forEach(Consumer action):对此流的每个元素执行操作
// Consumer接口中的方法 void accept(T t):对给定的参数执行此操作
//在forEach方法的底层,会循环获取到流中的每一个数据.
//并循环调用accept方法,并把每一个数据传递给accept方法
//s就依次表示了流中的每一个数据.
//所以,我们只要在accept方法中,写上处理的业务逻辑就可以了.
list.stream().forEach(
new Consumer() {
@Override
public void accept(String s) {
System.out.println(s);
}
}
);
//forEach方法的形参是一个接口,那么传递给它的一定是接口的实现类对象,在这
//里先写一个匿名内部类,这个匿名内部类就是接口的实现类对象
System.out.println("====================");
//lambda表达式的简化格式 (与形参保持一致数据类型与流中保持一致)->{}
//是因为Consumer接口中,只有一个accept方法
list.stream().forEach(
(String s)->{
System.out.println(s);
}
);
System.out.println("====================");
//lambda表达式还是可以进一步简化的.
// 形参只有一个类型可以简化小括号可以简化
list.stream().forEach(s->System.out.println(s));
}
}
### 5、在Stream流中无法直接修改集合,数组等数据源中的数据
![在这里插入图片描述](https://img-blog.csdnimg.cn/86d6c21f95fe41999baab031c2c9e380.png)
/**
* Stream流的收集方法
* 练习:
* 定义一个集合,并添加一些整数1,2,3,4,5,6,7,8,9,10
* 将集合中的奇数删除,只保留偶数。
* 遍历集合得到2,4,6,8,10。
*/
public class MyStream6 {
public static void main(String[] args) {
ArrayList list = new ArrayList<>();
//List.of批量添加太麻烦用遍历
for (int i = 1; i <= 10; i++) {
list.add(i);
}
// list.stream().filter(
// (Integer i)->{
// return i % 2 == 0;
// }
// )
list.stream().filter(number -> number % 2 == 0).forEach(number -> System.out.println(number));
System.out.println(“====================”);
for (Integer integer : list) {
System.out.println(integer);
}
}
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/5409a644f5324b0ca601874609b7aff4.png)
### 6、Stream流的收集操作
![在这里插入图片描述](https://img-blog.csdnimg.cn/84121fbc4b16482484631820e2724c4d.png)
/**
* Stream流的收集方法
* 练习:
* 定义一个集合,并添加一些整数1,2,3,4,5,6,7,8,9,10
* 将集合中的奇数删除,只保留偶数。
* 遍历集合得到2,4,6,8,10。
*/
public class MyStream7 {
public static void main(String[] args) {
ArrayList list1 = new ArrayList<>();
for (int i = 1; i <= 10; i++) {
list1.add(i);
}
list1.add(10);
list1.add(10);
list1.add(10);
list1.add(10);
list1.add(10);
//filter负责过滤数据的.
//collect负责收集数据.
//获取流中剩余的数据,但是他不负责创建容器,也不负责把数据添加到容器中.
//Collectors.toList() : 在底层会创建一个List集合.并把所有的数据添加到List集合中.
List<Integer> list = list1.stream().filter(number -> number % 2 == 0)
.collect(Collectors.toList());
System.out.println(list);
Set<Integer> set = list1.stream().filter(number -> number % 2 == 0)
.collect(Collectors.toSet());
System.out.println(set);
}
}
### 7、Stream流的练习
![在这里插入图片描述](https://img-blog.csdnimg.cn/d14d256bc59749d48e87e23930e79aaa.png)
/**
* 现在有两个ArrayList集合,分别存储6名男演员名称和6名女演员名称,要求完成如下的操作
* 1.男演员只要名字为3个字的前两人
* 2.女演员只要姓杨的,并且不要第一个
* 3.把过滤后的男演员姓名和女演员姓名合并到一起
* 4.把上一步操作后的元素作为构造方法的参数创建演员对象,遍历数据
* 演员类Actor,里面有一个成员变量,一个带参构造方法,以及成员变量对应的get/set方法
*/
public class MyStream9 {
public static void main(String[] args) {
ArrayList manList = new ArrayList<>();
manList.add(“张国立”);
manList.add(“张晋”);
manList.add(“刘烨”);
manList.add(“郑伊健”);
manList.add(“徐峥”);
manList.add(“王宝强”);
ArrayList<String> womanList = new ArrayList<>();
womanList.add("郑爽");
womanList.add("杨紫");
womanList.add("关晓彤");
womanList.add("张天爱");
womanList.add("杨幂");
womanList.add("赵丽颖");
//男演员只要名字为3个字的前两人
Stream<String> stream1 = manList.stream().filter(name -> name.length() == 3).limit(2);
//女演员只要姓杨的,并且不要第一个
Stream<String> stream2 = womanList.stream().filter(name -> name.startsWith("杨")).skip(1);
Stream.concat(stream1,stream2).forEach(name -> {
Actor actor = new Actor(name);
System.out.println(actor);
});
}
}
**结束语 🥇🥇🥇**
>
> 发现非常好用的一个刷题网站!大家一起努力!加油!!!
> 题目难度可以自行选择
> 在线编程出答案,(也可自行查看答案)非常方便
> 程序员刷题神器网站[点击链接注册即可刷题](https://bbs.csdn.net/topics/618166371)
>
>
>
跳槽是每个人的职业生涯中都要经历的过程,不论你是搜索到的这篇文章还是无意中浏览到的这篇文章,希望你没有白白浪费停留在这里的时间,能给你接下来或者以后的笔试面试带来一些帮助。
也许是互联网未来10年中最好的一年。WINTER IS COMING。但是如果你不真正的自己去尝试尝试,你永远不知道市面上的行情如何。这次找工作下来,我自身感觉市场并没有那么可怕,也拿到了几个大厂的offer。在此进行一个总结,给自己,也希望能帮助到需要的同学。
### 面试准备
**[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/topics/618166371)**
面试准备根据每个人掌握的知识不同,准备的时间也不一样。现在对于前端岗位,以前也许不是很重视算法这块,但是现在很多公司也都会考。建议大家平时有空的时候多刷刷leetcode。算法的准备时间比较长,是一个长期的过程。需要在掌握了大部分前端基础知识的情况下,再有针对性的去复习算法。面试的时候算法能做出来肯定加分,但做不出来也不会一票否决,面试官也会给你提供一些思路。