不可变集合 and Stream流

不可变集合

一. 什么是不可变集合?

  1. 不可变集合就是不可以被修改的集合
  2. 集合的数据项在创建的时候提供,并且在整个生命周期中都不可改变。否则会报错

二. 为什么创建不可变集合?

  1. 如果某个数据不能被修改,把它防御性地拷贝到不可变集合中是个很好的实践。
  2. 或者当即和对象被不可信的库调用时,不可变形式是安全的

三. 如何创建不可变集合?

在这里插入图片描述

public static void main(String[] args) {
	//1.不可变List集合
	List<Double> lists = List.of(1234,2345,64,457);

	//2.不可变Set集合
	Set<String> sets = Set.of("熬制追猎者","星星你","德玛西亚之力");

	//3.不可变Map集合
	Map<String , Integer> maps = Map.of("HuaWei",20,"iphone",12);
}

Stream流

一. 什么是Steam流?

  1. 在Java8中,得益于Lambda所带来的函数式编程,引入一个全新的Stream流概念
  2. 目的:用于简化集合和数组操作的API

二体验Stream流的作用

  1. 需求:按照下面的要求完成集合的创建和遍历在这里插入图片描述
public static void main(String[] args) {
	List<String> names = new ArrayList<>();
	names.addAll(names,"马儿扎哈","张三丰","张无忌","张三","迪奥","奥迪")List<String> zhangList = new ArrayList<>();
	//1.把张开头的元素存储到一个新的集合
	for(String name : names){
		if(name.startWith("张")){
			zhangList.add(name);
}
}

	//2.把张开头的集合中的长度为3的元素存储到一个新的集合
	List<String> zhangThreeList = new ArrayList<>();
	for(String name : zhangList){
		if(name.length == 3){
			zhangThreeList.add(name);
}
}

	//3.Stream流
	names.stream().filter(s -> s.startsWith("张")).filter(s -> s.length() == 3).forEach(s -> System.out.println(s));

	
}

三. Stream流的核心思想

  • 先得到集合或者数组的Stream流(想象成一根传送带)
  • 把元素放上去
  • 然后就用这个Stream流简化的API来方便操作元素

四.Stream流的三类方法

  • 获取Sream流

创建一条流水线,并把数据放到流水线上准备进行操作

  • 中间方法

流水线上的操作。一次操作完毕之后,还可以继续进行其他操作(面试编程)

  • 终结方法

在这里插入图片描述

一个Steam流只能有一个终结方法,是流水线上的最后一个操作

Stream操作集合或者数组的第一步是先得到Stream流,然后才能使用流的功能

  • 集合获取Stream流的方式

可以使用Collection接口中的默认方法stream()生成流在这里插入图片描述

  • 数组获取Stream流的方式

在这里插入图片描述

public static void main(String[] args) {
	//Collection集合获取流
	Collection<String> list = new ArrayList<>();
	Stream<String> s = list.stream();
	
	//Map集合获取流
	Map<String , Integer> maps = new HashMap<>();
	//键流
	Stream<String> keyStream = maps.keySet().stream();
	
	//值流
Stream<String> valuesSream = maps.values().stream();

	//数组获取流
	String[] name  = {"张三","赵敏","李思思"};
	Stream<String> nameStream = Arrays.stream(name);
}

五.Stream流的常用API

在这里插入图片描述

public static void mian(String[] args) {
	List<String> lists = new ArrayList<>();
	lists.add("张金玲");
	lists.add("张三方");
	lists.add("张无忌");
	lists.add("赵敏");
	lists.add("张金玲");
	lists.add("张金");

 //进行过滤
	lists.stream().filter(s -> s.starstWith("张")).forEach(s -> System.out.println(s));
	
	lists.stream().filter(s -> s.length() == 3).count();
	System.out.println(size);

//获取前几个元素
	lists.steam().filter(s -> s.startWith("张")).limit(2).forEach(s -> System.out.println(s));

//跳过前几个元素
	lists.steam().filte(s -> s.startWith("张")).skip(2).forEach(s -> System.out,println(s));
	
	//拓展:Map加工方法
	//给集合元素前面都加上:亲爱的
	lists.stream().map(s -> "亲爱的"+s).forEach(s -> System.out.println(s));
	
	
//取出流中重复的元素

//合并流
Stream<String> s1 = List.stream().filter(s -> startsWith("张"))Stream<String> s2 = Stream.of("java","java1");
Stream<String> s3 = Stream.concat(s1,s2);
}

注意:
1.中间方法也称为非终结方法,调用完成后返回新的Stream流可以继续使用,支持链式编程
2.在Stream流中无法直接修改集合,数组中的数据

六.收集Stream流

  • 收集Stream流的含义:就是把Stream流操作后的结果数据转回到集合或者数组中去
  • Stream流:方便操作集合/数组的手段

这里是引在这里插入图片描述

public static void main(String[] args) {
	List<String> lists = new ArrayList<>();
	list.add("张三");
	list.add("李四");
	list.add("赵强");
	list.add("张三丰");
	
	Stream<String> s =lists.stream().filter(s -> s.startWith("张"));
	List<String> zhangList = s.collect(CollectortoList());

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值