设为首页 加入收藏

TOP

Map大家族的那点事儿(1) :Map(二)
2018-09-04 20:46:41 】 浏览:309
Tags:Map 大家族 那点 事儿
> keySet(); /** * 返回包含Map中所有value的集合,对该视图的所有修改操作会对Map产生同样的影响,反之亦然。 */ Collection<V> values(); /** * 返回包含Map中所有键值对的Set,对该视图的所有修改操作会对Map产生同样的影响,反之亦然。 */ Set<Map.Entry<K, V>> entrySet(); /** * Entry代表一对键值对,规范了一些基本函数以及几个已实现的类函数(各种比较器)。 */ interface Entry<K,V> { K getKey(); V getValue(); V setValue(V value); boolean equals(Object o); int hashCode(); public static <K extends Comparable<? super K>, V> Comparator<Map.Entry<K,V>> comparingByKey() { return (Comparator<Map.Entry<K, V>> & Serializable) (c1, c2) -> c1.getKey().compareTo(c2.getKey()); } public static <K, V extends Comparable<? super V>> Comparator<Map.Entry<K,V>> comparingByValue() { return (Comparator<Map.Entry<K, V>> & Serializable) (c1, c2) -> c1.getValue().compareTo(c2.getValue()); } public static <K, V> Comparator<Map.Entry<K, V>> comparingByKey(Comparator<? super K> cmp) { Objects.requireNonNull(cmp); return (Comparator<Map.Entry<K, V>> & Serializable) (c1, c2) -> cmp.compare(c1.getKey(), c2.getKey()); } public static <K, V> Comparator<Map.Entry<K, V>> comparingByValue(Comparator<? super V> cmp) { Objects.requireNonNull(cmp); return (Comparator<Map.Entry<K, V>> & Serializable) (c1, c2) -> cmp.compare(c1.getValue(), c2.getValue()); } } // 比较和hashing /** * 将指定的对象与此Map进行比较是否相等。 */ boolean equals(Object o); /** * 返回此Map的hash code。 */ int hashCode(); // 默认方法(非抽象方法) /** * 根据key查找value,如果该key不存在或等于null则返回defaultValue。 */ default V getOrDefault(Object key, V defaultValue) { V v; return (((v = get(key)) != null) || containsKey(key)) ? v : defaultValue; } /** * 遍历Map并对每个键值对执行指定的操作(action)。 * BiConsumer是一个函数接口(具有一个抽象方法的接口,用于支持Lambda), * 它代表了一个接受两个输入参数的操作,且不返回任何结果。 * 至于它奇怪的名字,根据Java中的其他函数接口的命名规范,Bi应该是Binary的缩写,意思是二元的。 */ default void forEach(BiConsumer<? super K, ? super V> action) { Objects.requireNonNull(action); for (Map.Entry<K, V> entry : entrySet()) { K k; V v; try { k = entry.getKey(); v = entry.getValue(); } catch(IllegalStateException ise) { // this usually means the entry is no longer in the map. throw new ConcurrentModificationException(ise); } action.accept(k, v); } } /** * 遍历Map,然后调用传入的函数function生成新value对旧value进行替换。 * BiFunction同样是一个函数接口,它接受两个输入参数并且返回一个结果。 */ default void replaceAll(BiFunction<? super K, ? super V, ? extends V> function) { Objects.requireNonNull(function); for (Map.Entry<K, V> entry : entrySet()) { K k; V v; try { k = entry.getKey(); v = entry.getValue(); } catch(IllegalStateException ise) { // this usually means the entry is no longer in the map. throw new ConcurrentModificationException(ise); } // ise thrown from function is not a cme. v = function.apply(k, v); try { entry.setValue(v); } catch(IllegalStateException ise) { // this usually means the entry is no longer in the map. throw new ConcurrentModificationException(ise); } } } /** * 如果指定的key不存在或者关联的value为null,则添加键值对。 */ default V putIfAbsent(K key, V value) { V v = get(key); if (v == null) { v = put(key, value); } return v; }
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇oracle 中 print_table 存储过程.. 下一篇SpringBoot | 第十五章:基于Post..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目