guava——集合(2)
来源:互联网 发布:sql连表update 编辑:程序博客网 时间:2024/06/05 03:58
guava提供了很多关于集合的工具方法,适用于所有集合的静态方法。
guava提供了可以判断范型的静态工厂方法:
List<TypeThatsTooLongForItsOwnGood> list = Lists.newArrayList();Map<KeyType, LongishValueType> map = Maps.newLinkedHashMap();
而且可以让在初始化的时候就指定起始元素。
Set<Type> copySet = Sets.newHashSet(elements);List<String> theseElements = Lists.newArrayList("alpha", "beta", "gamma");
注意:Guava引入的新集合类型没有暴露原始构造器,也没有在工具类中提供初始化方法。而是直接在集合类中提供了静态工厂方法,例如:
Multiset multiset = HashMultiset.create();
Forwarding装饰器
针对所有类型的集合接口,Guava都提供了Forwarding抽象类以简化装饰者模式的使用。
Forwarding抽象类定义了一个抽象方法:delegate(),你可以覆盖这个方法来返回被装饰对象。所有其他方法都会直接委托给delegate()。例如说:ForwardingList.get(int)实际上执行了delegate().get(int)。
通过创建ForwardingXXX的子类并实现delegate()方法,可以选择性地覆盖子类的方法来增加装饰功能,而不需要自己委托每个方法——译者注:因为所有方法都默认委托给delegate()返回的对象,你可以只覆盖需要装饰的方法。
此外,很多集合方法都对应一个”标准方法[standardxxx]”实现,可以用来恢复被装饰对象的默认行为,以提供相同的优点。比如在扩展AbstractList或JDK中的其他骨架类时,可以使用类似standardAddAll这样的方法。
让我们看看这个例子。假定你想装饰一个List,让其记录所有添加进来的元素。当然,无论元素是用什么方法——add(int, E), add(E), 或addAll(Collection)——添加进来的,我们都希望进行记录,因此我们需要覆盖所有这些方法。
class AddLoggingList<E> extends ForwardingList<E> {final List<E> delegate; // backing list@Override protected List<E> delegate() { return delegate;}@Override public void add(int index, E elem) { log(index, elem); super.add(index, elem);}@Override public boolean add(E elem) { return standardAdd(elem); // 用add(int, E)实现}@Override public boolean addAll(Collection<? extends E> c) { return standardAddAll(c); // 用add实现}}
记住,默认情况下,所有方法都直接转发到被代理对象,因此覆盖ForwardingMap.put并不会改变ForwardingMap.putAll的行为。小心覆盖所有需要改变行为的方法,并且确保装饰后的集合满足接口契约。
通常来说,类似于AbstractList的抽象集合骨架类,其大多数方法在Forwarding装饰器中都有对应的”标准方法”实现。
对提供特定视图的接口,Forwarding装饰器也为这些视图提供了相应的”标准方法”实现。例如,ForwardingMap提供StandardKeySet、StandardValues和StandardEntrySet类,它们在可以的情况下都会把自己的方法委托给被装饰的Map,把不能委托的声明为抽象方法。
- guava——集合(2)
- [Guava]——集合操作
- Guava学习——集合Multimap
- Guava学习——集合类BiMap
- guava新集合类型——Multimap
- Guava学习——集合工具
- guava学习之——集合类创建的简化。
- guava集合
- Guava集合
- guava 集合
- Google Guava学习(6)-Guava集合工具 Multiset
- Google Guava学习(7)-Guava集合工具 Bimap接口
- Google Guava学习(8)-Guava集合工具 Table接口
- 二、2、2Guava的新型集合
- Google Guava API学习笔记(2):集合
- guava (三) 集合工具类
- guava (四)--集合中的FluentIterable类
- guava学习之——guava简介
- 二进制颜色代码大全附英文名(转载)
- 在APP中加载网页的套路(一):外壳的产生
- 【OpenCV学习笔记】二十五、轮廓查找与绘制(二)访问轮廓中每个点
- 人才留得住是因为本身就留得住 留不住的你永远留不住
- 设置条目字体大小
- guava——集合(2)
- 通俗易懂!超全面的移动端尺寸基础知识科普指南
- LR_函数
- 在roscore时出现 terminate called after throwing an instance of 'std::runtime_error'的解决方法
- 为FragmentDialog添加转场动画
- Codeforces 652C Foe Pairs【二分+RMQ】好像这题Dp做法很多啊
- [LeetCode]167. Two Sum II
- get_device和put_device ,以及of_node_get <->of_node_put
- (dwz)打开一个页面,再打开另一个页面,input框中出现本该隐藏的内容