Java基础-Stream流_entryset(2)

// 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。算法的准备时间比较长,是一个长期的过程。需要在掌握了大部分前端基础知识的情况下,再有针对性的去复习算法。面试的时候算法能做出来肯定加分,但做不出来也不会一票否决,面试官也会给你提供一些思路。
  • 11
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值