Java Plus

"成为J佬的一天"

Posted by HZY on December 26, 2025

java流操作

不可变集合

  • List.of(Elements …)
  • Set.of(Elements …)
    • 我们知道Set是不可重复的,但是用这个方法,放置重复的值会报错
  • Map.of()
    • 键不能重复
    • 最多传递20个参数,即10个键值对(不是通过可变参数实现的)
    • ofEntries()可以传递超过20的形参
    1
    2
    3
    4
    
      //手动生成不可变集合
      Map.ofEntries(hashmap.entrySet().toArray(new Map.Entry[]0));
      //自动copy不可变集合
      Map.copy(hashmap);
    

    上面静态方法创建出来的对象都是不可变对象,只能get,不能添加修改删除

Stream流

  • 示例
1
list.stream().filter(name->name.startsWith("张")).filter(name->name.length()==3).forEach(System.out::println);
获取方式 方法名 说明
单列集合 default Stream<E> stream() Collection中的默认方法
双列集合 无法直接使用stream流
数组 public static <T> Stream<T> stream(T[] array) Arrays工具类中的静态方法
一堆零散数据 public static <T> Stream<T> of(T... values) Stream接口中的静态方法
1
2
3
4
5
6
7
8
9
10
11
        //单列集合
        list.stream().filter(name->name.startsWith("张")).filter(name->name.length()==3).forEach(System.out::println);
        //双列集合
        map.entrySet().stream().forEach(System.out::println);
        //数组
        Arrays.stream(arr).forEach(System.out::println);
        //一堆零散数据
        Stream.of("jfal","djhfka","dfjsa").forEach(System.out::println);
        //注意这个Stream.of(),有人会用这个去替代数组的Arrays.stream()
        //我们要知道,Stream.of()的可变参数底层是个对象数组,我们不能传进去一个基本类型数组,不然错了,
        //底层会将一整个基本类型数组看作为一个对象

中间方法

不会影响集合本身

名称 说明
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) 转换流中的数据类型
  • distinct()方法底层有一个hashMap进行去重,所以必须实体类实现hashcode()和equals()方法

终结方法

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

收集方法

  • .collect(Collectors.toList())
  • .collect(Collectors.toSet())