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())