JAVA Map&&Stream流
Map 【重点】
什么是Map
Map
将键映射到值的对象。 Map不能包含重复的键; 每个键可以映射最多到一个值。
Map是一个双列集合,存储的每一个元素都是由两列组成,
第一列我们称之为键,第二列称之为值,把这种由键和值组成的每一个元素称之为键值对。
<K,V>是泛型,K变量用于规定键存储的数据类型,V变量用于规定值存储的数据类型
键和值的数据类型可以相同也可以不同。
K:Key
V:Value
Map的特点
1、Map不能包含重复的键
如果键重复,则值覆盖
2、Map的值可以重复
3、Map的键和值是一一对应的
通过一个键只能找到唯一对应的值
Map的体系结构
Map
|-HashMap
|-TreeMap
Map的常用方法
基本方法
V put(K key, V value)
void clear()
V remove(Object key)
boolean containsKey(Object key)
boolean containsValue(Object value)
boolean isEmpty()
int size()
Collection<V> values()
遍历方法
Set<K> keySet()
V get(Object key)
Set<Map.Entry<K,V>> entrySet()
default void forEach(BiConsumer<? super K,? super V> action)
可变参数 【重点】
什么是可变参数
参数个数可变,用作方法的形参出现,那么方法参数个数就是可变的了
JDK5.0的新特性(自动拆装箱、增强for、泛型和可变参数)
方法的参数类型已经确定,个数不确定,我们可以使用可变参数
可变参数定义格式
修饰符 返回值类型 方法名(数据类型... 变量名) {
方法体;
}
可变参数的注意事项
1、可变参数本质上是一个数组,但是它的使用位置是有局限的,只能用在方法的形参处(定义方法时的小括号中)
2、可变参数表示参数个数可变,我们传递实参的时候可以传递
将多个参数存放到数组中,将数组进行传递
0~无穷多个参数
3、如果一个方法有多个参数,包含可变参数,可变参数要放在最后
一个方法的可变参数只能定义一个
Stream流 【重点】
什么是Stream流
Stream流用于简化集合和数组操作的代码
Stream流类似于生产流水线,下一步的操作都是基于上一步的,并且流水线只能一直往下一步操作,不能回头。
Stream流的操作
1、获取Stream流(将源数据->Stream流)
2、操作Stream流
中间方法
终结方法
3、收集Stream流(Stream流->源数据)
获取Stream流(将源数据->Stream流)
集合
单列集合
集合对象.stream();
双列集合
不能直接获取,需要间接获取(先将双列集合转为单列集合,然后再获取)
集合对象.keySet().stream();
集合对象.entrySet().stream()
集合对象.values().stream()
数组
Arrays.stream(数组名);
Stream.of(数据1,数据2,数据3......);
操作Stream流
中间方法:
Stream
Stream
Stream
public static
Stream
如果一个方法返回值还是Stream,那么这个方法就是中间方法
流水线的中间步骤,操作完之后还可以继续操作流
终结方法
void forEach(Consumer<? super T> action);
long count();
如果一个方法返回值不是Stream,那么这个方法就是终结方法
收集Stream流(Stream流->源数据)
集合
将Stream流中的数据收集到集合,不论是单列集合,还是双列集合使用的使用一下这个方法(Stream的方法):
到底收集到什么集合中,和你往方法中传递的值有关:
stream.collect(Collectors.toList()):收集到List集合中
stream.collect(Collectors.toSet()):收集到Set集合中
stream.collect(Collectors.toMap(…)):收集到Map集合中
单列集合
List
stream.collect(Collectors.toList())
Set
stream.collect(Collectors.toSet())
双列集合
stream.collect(Collectors.toMap(...)):收集到Map集合中
数组
Object[] toArray();
<A> A[] toArray(IntFunction<A[]> generator);