Java核心编程总结(七、Stream流)

1.基础回顾+面试

===========================================================================

1.1Stream流


  1. 什么是Stream流?

答:在java8中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream流概念,用于简化集合类库或者数据API的弊端

  1. Stream流能解决什么问题?

答:可以解决已有集合类库或者数据API的弊端,Stream流认为集合和数组操作的API很不好用,所以采用了Stream流简化集合和数据的操作

1.2Stream流的获取


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);

}

}

1.3Stream流API


| 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);

}

}

1.4终结与非终结方法


  • 终结方法:一旦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)

大厂面试场景

三年Java开发,刚从美团、京东、阿里面试归来,分享个人面经

知识点总结

三年Java开发,刚从美团、京东、阿里面试归来,分享个人面经

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)]

  • 20
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值