【无标题】

不可变集合

  • 创建不可变集合的应用场景
  • 如果某个数据不能被修改,把它防御性地拷贝到不可变集合中是个很好的选择
  • 当集合对象被不可信的库被调用时,不可变形式是安全的。(简单理解:不想让别人修改集合中的内容)
  • 创建不可变集合的书写格式
  • 在List、Set、Map接口中,都存在静态的of方法,可以获取一个不可变的集合
方法名称说明
static <E> List<E> of(E..elements)创建一个具有指定元素的List集合对象
static <E> Set<E> of(E...elements)创建一个具有指定元素的Set集合对象
static <K,V> Map<K,V> of(E..elements)创建一个具有指定元素的Map集合对象

注意:这个集合不能添加、删除、修改。创建Set集合是,要保证集合里面的数据不重复。

创建Map集合时:

  1. 键不能重复、
  2. Map里面的of方法,参数是有上限的,最多只能传递20个参数,10个键值对
  3. 如果我们要传递多个键值对对象,数量大于10个
    1. 创建普通的Map集合
    2. 利用创建好的Map集合获取一个不可变对象的集合
      // 创建一个Map集合
      Map<String,String> m = new HashMap<>();
      // 利用上面的数据来获取一个不可变集合
      // 获取到所有的键值对对象(Entry对象)
      Set<Map.Entry<String,String>> entries = m.entrySet();
      // 把entries变成一个数组
      // 如果集合的长度 > 数组的长度:数据在数组中放不下,此时会根据实际数据的个数,重新创建数组
      // 如果集合的长度 < 数组的长度,数据在数组中放得下,此时不会创建新的数据,而是直接用
      Map.Entry[] arr = entries.toArray(new Map.Entry[0]);
      // 不可变的Map集合
      Map map = Map.ofEntries(arr);

    3. Map.copyOf(要变为不可变集合的集合)来创建一个新的不可变集合(JDK必须大于等于10才可以使用)

Stream流

Stream流的作用

结合了Lambda表达式,简化集合、数组的操作

Stream流的使用步骤

1.先得到一条Stream流(流水线),并把数据放上去

获取方式方法名说明
单列集合default Stream<E> stream()Collection中的默认方法
双列集合无法直接使用Stream流
数组public static <T> Stream<T> stream(T[] array)Arrays工具类中的静态方法
一堆零散数据public static <T> Stream<T> of(T...values)Stream接口中的静态方法

        Stream接口中静态方法of细节:方法的形参是一个可变参数,可以传递一堆零散的数据,也可以传递数组,但是数组必须是引用数据类型的,如果传递基本数据类型,是会把整个数组当做一个元素,放到Stream当中。

2.使用中间方法对流水线上的数据进行操作

名称说明
Stream<T> filter(Predicate<? super T> predicate)过滤
Stream<T> limit(long maxSize)获取前几个元素
Stream<T> skip(long n)跳过前几个元素
Stream<T> distinct()元素去重,依赖(hashCode和equals方法)
static <T> Stream<T> concat(Stream a,Stream b)合并a和b两个流为一个流
Stream<R> map(FUnction<T,R> mapper)转换流中的数据类型

        注意1:中间方法,返回新的Stream流,原来的Stream流只能使用一次,建议使用链式编程注意2:修改Stream流中的数据,不会影响原来集合或数组中的数据

3.使用终结方法对流水线上的数据进行操作,

名称说明
void forEach(Consumer action)遍历
long count()统计
toArray()收集流中的数据,放到数组中
collect(Collector collector)收集流中的数据,放到集合中

toArray方法的参数作用:负责创建一个指定类型的数组。底层:会依次得到流里面的每一个数据,并把数据放到数组中。返回值:是一个装着流里面所有数据的数组

collect中toMap:参数一表示键的生成规则

                        参数二表示值的生成规则

参数一:

        Function泛型一:表示流中每一个数据的类型

                        泛型二:表示Map集合中键的数据类型

        方法apply形参:依次表示流里面的每一个数据

                方法体:生成键的代码

                返回值:已经生成的键

参数二:

        Function泛型一:表示流中每一个数据的类型

                        泛型二:表示Map集合中值的数据类型

        方法apply形参:依次表示流里面的每一个数据

                方法体:生成值的代码

                返回值:已经生成的值

收集到Map集合键不能重复

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值