
Java Plus
2025/12/26大约 2 分钟
java流操作
不可变集合
List.of(Elements ...)
Set.of(Elements ...)
- 我们知道Set是不可重复的,但是用这个方法,放置重复的值会报错
Map.of()
- 键不能重复
- 最多传递20个参数,即10个键值对(不是通过可变参数实现的)
- ofEntries()可以传递超过20的形参
//手动生成不可变集合 Map.ofEntries(hashmap.entrySet().toArray(new Map.Entry[]0)); //自动copy不可变集合 Map.copy(hashmap);
上面静态方法创建出来的对象都是不可变对象,只能get,不能添加修改删除
Stream流
- 示例
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接口中的静态方法 |
//单列集合
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())