Jakarta commons——Collections

    技术2026-09-27  6

    每一个集合对象都有其对应的utils类

    ■ 说明:

    集合类

       将多个collection组合成为一个collection

       Ordered 的map和set,并可使用LRU算法

       Identity map 使用==来进行对象的比较

       BidiMap 一个接口, 可以通过value查找key,通过key查找value

       Bag  当你想要跟踪进出某个集合的元素的总数时,Bag是非常有用的。 实际使用的应该是实现了该接口的类,例如HashBag或TreeBag--从这些类的名字也可以看出,HashBag实现的是一个HashMap的Bag,而TreeBag实现的是TreeMap的Bag。Bag接口中两个最重要的方法是:getCount(Object o),用来返回Bag里面特定对象的出现次数;uniqueSet(),返回所有唯一元素。

       Buffer 接口允许按照预定义的次序删除集合中的对象,删除次序可以是LIFO(Last In First Out,后进先出),或FIFO(First In First Out,先进先出),另外还可以是自定义的次序。

       BinaryHeap  类实现了Buffer接口,能够按照自然次序删除元素。如果要颠倒次序,则必须传入一个false,告诉Heap采用自然次序的逆序。

     

    BinaryHeap heap = new BinaryHeap(); // … // 将元素加入该Heap heap.add(new Integer(-1)); heap.add(new Integer(-10)); heap.add(new Integer(0)); heap.add(new Integer(-3)); heap.add(new Integer(5)); //… // 删除一个元素 heap.remove(); //调用该Heap的remove,按照自然次序,元素集合中的-10将被删除。如果我们要求按照逆序排序,则被删除的将是5。

     FastArrayList、FastHashMap和FastTreeMap类 能够按照两种模式操作。

          第一种模式是"慢模式",类的修改操作(添加、删除元素)是同步的。

         另一种模式是"快模式",对这些类的访问假定为只读操作,因此不需要同步,速度较快。在快模式中,结构性的改动通过下列方式完成:首先克隆现有的类,修改克隆得到的类,最后用克隆得到的类替换原有的类。

         FastArrayList、FastHashMap和FastTreeMap类特别适合于那种初始化之后大部分操作都是只读操作的多线程环境。

    Util

    CollectionUtil:

    AddIgnoreNull transformer 集合 过滤 查找 等

    MapUtil:

    AddIgnoreNull transformer

    SetUtil:

    提供 predicated transformer type 同步和变为只读

    ListUtils:

    集合操作,计数,functor(predicated transformer ),类型转换

    Iterator

    iterators包为各种集合和对象提供标准Java Collection包没有提供的迭代器。如ArrayIterator, MapIterator

    IterableMap map = new HashedMap(); MapIterator it = map.mapIterator(); while (it.hasNext()) { Object key = it.next(); Object value = it.getValue(); it.setValue(newValue); }
    Transformer

    已经实现的: 

    Invoker - 返回 输入对象.method() 

    Clone -  输入对象的clone 

    Constant - 总是返回同一对象

    Closure - 执行closure,返回源对象

    Predicate - 返回boolean

    Factory - 从factory返回一个object

    Chained - 将两个或多个transformer组合

    Switch - 根据 predicates进行选择

    SwitchMap - 从 Map 中找出transformer 

    Instantiate - 输入对象所在的类

    Map - 从 Map中返回对象

    Null - 总是返回null 对象 

    NOP - 不做任何操作,返回源对象

    Exception - 总是抛出异常

    StringValue - 返回一个代表源对象的字符串

    Predicated

    PredicatedUtils:一种判断方法,可以有any,all    none     not等逻辑装饰

    Comparators

    Comparators包和ComparatorUtils

    包提供了一些实用的比较类。

    // … // ① 创建一个BinaryHeap类,但这一次参数中 // 指定NullComparator。NullComparator比较 // null与其他对象,根据nullsAreHigh标记来 // 判断null值比其他对象大还是小:如果 // nullsAreHigh的值是false,则认为null要比 // 其他对象小。 BinaryHeap heap2 = new BinaryHeap (new NullComparator(false)); // … // ② 将一些数据(包括几个null值)加入heap: heap2.add(null); heap2.add(new Integer("6")); heap2.add(new Integer("-6")); heap2.add(null); // … // ③ 最后删除一个元素,Bag包含的null将减少 // 一个,因为null要比其他对象小。 heap2.remove();

           所有的算子-- Closure, Predicate, 和 Transformer—能够被合并为合并算子来处理任何种类的逻辑问题。switch, while和for结构能够被SwitchClosure, WhileClosure, 和 ForClosure模型化。

            复合的逻辑表达式可以被多个Predicate构建,通过使用OrPredicate, AndPredicate, AllPredicate, 和 NonePredicate将它们相互联接。Commons BeanUtils也包含了算子的实现被用来将算子应用到bean的属性中-- BeanPredicate, BeanComparator, 和 BeanPropertyValueChangeClosure。算子是考虑底层的应用架构的不一样的方法,它们可以很好地改造你编码实现的方法。

            Jakarta Commons JXPath增加了一种有趣的手法:你可以用JXPath来从bean和集合中选择对象 (参考“临时”目录下)

     

    CollectionUtils

    查找

             findFirstMatch(Collection source,Collection candidates)

             findValueOfType(查找class或class数组中的对象)

    判断

             isEmpty( null 或者empty)

    合并

             mergeArrayIntoCollection    mergePropertiesIntoMap

    最新回复(0)