1. 不可变集合

 List.of()
 Set.of()
 Map.of()
  • 特点:定义完成后不可以修改,或者添加,删除
  • List直接用,Set的元素不可重复。
  • Map的of方法,键是不能重复的,并且最多只能传10个键值对,共20个参数
  • 如果要传递多个键值对的不可变Map,数量大于十个,用ofEntry

2. Stream流的思想和获取方法

作用: 结合Lambda表达式,简化集合、数组的操作
使用步骤:

  1. 先得到一条Stream流(流水线),并把数据放上去
  2. 利用Stream流中的API进行各种操作。

    • 中间方法,方法调用完毕后,还可以调用其他方法
    • 终结方法,最后一步,调用完毕后,不能调用其他方法

(1)单列集合

​ stream是Collection中的默认方法,可以直接使用

list.stream()

(2)双列集合

无法直接获取stream流

HashMap<String,Integer> hm = new HashMap<>();
//添加数据~~~
hm.entrySet.stream()
hm.keySet.stream()

(3)数组

通过Array获取strem流

int[] arr1= {1,2,3,4,5}
Arrays.stream(arr1)

(4)一堆零散数据

通过Stream接口中的静态方法

Stream.of(1,2,3,4,5,6)
int[] arr = {1,2,3,4,5}
Stream.of(arr)  //这种写法是错误的

注意:

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

3. Stream流中间方法

注意:

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

(1)filter 过滤

  • 参数为Predicate,函数式接口,可以写匿名内部类,也可以写lambda表达式。
  • 返回值为true,表示当前数据留下
  • 返回值为false,表示当前数据舍弃不要

(2)limit 获取前几个元素

list.stream.limit(3)

(3) skip 跳过前几个元素

list.stream.skip(3)

(4) distinct 元素去重 (一来hashCode和equals方法)

list.stream.distinct()

(5)concat 合并a和b两个流为1个流

Stream.concat(list1.stream(),list2.steram()).forEach(s->System.out.println(s));

(6) map 转换流中的数据类型

list.stream().map(s-> Integer.parseInt(s.split("-")[1])).forEach(s-> System.out.println(s));

4. String流终结方法

(1)forEach 遍历

(2)count() 统计

(3)toArray()放入数组

list.stream().toArray(value -> newString[value]);

(4)Collection 放入集合

放入map需要记一下。

list.stream().filter(s->"男".equals(s.split("-")[1]).collect(Collectors.toMap(s->s.split("-")[0],s->Integer.parseInt(s.split("-")[2])));
最后修改:2023 年 12 月 04 日
感恩的心,感谢有你!