Apache Commons-Collections4工具类使用(Map、List、Set集合全覆盖)集合开发工具大利器

原创 xiaozhang 程序员xiaozhang 2023-07-12 23:12 发表于上海

收录于合集#Java27个

开发中我们常常会遇到对集合的操作,使用这个类库能简化你的代码,从而提高你的工作效率,让你从大量的底层代码中抽身。工欲善其事必先利其器,希望我介绍以后大家在开发中多多去使用这些工具类,让它们成为你在开发中的大利器。

要使用这个这些工具类首先要引入如下的jar包:

 <dependency>      <groupId>org.apache.commons</groupId>       <artifactId>commons-collections4</artifactId>       <version>4.1</version> </dependency>

如下是它的包结构,里面有很多好用的工具类。

好了让我们开始介绍相关的工具类。

ONE

CollectionUtils:集合操作的工具类,开发中会常常的使用。

1.1:union(final Iterable<? extends O> a, final Iterable<? extends O> b):两个集合的连接,类似于ORACLE数据库union all的功能。

List<String> list1 = Arrays.asList("1");List<String> list2 = Arrays.asList("2") ;List<String> union = (List<String>) CollectionUtils.union(list1, list2);System.out.println(union); // [1, 2]
 
************************************由于后面的段落也不知道是工具的原因,还是什么的问题段落就是对不齐,所以我把很多字放在了代码里面。这样看的更好看一些。我修改了很久样式就是不对。************************************
当然我们扩展一下功能,可以传递多个参数的方法。在开发中应用更广泛一些如下代码:【极力推荐大家去使用】。
 // 扩展的util方法,这个是可以传递多个集合的,底层还是使用union方法。 // 这个也是告诉大家去读他们源码的重要性,自己也就很容易去扩展,极大的 // 提高了我们的开发效率。private  static  <T> Collection<T> unionAll(Collection<T> coll1, Collection<T> coll2, Collection<T>... otherColls){        // 底层还是使用的union方法。        Collection<T> union = CollectionUtils.union(coll1, coll2);        for (Collection<T> coll : otherColls) {            union = CollectionUtils.union(union, coll);        }        return union;    }// 使用如下:List<String> list1 = Arrays.asList("1");List<String> list2 = Arrays.asList("2") ;List<String> list3 = Arrays.asList("3") ;List<String> union = (List<String>) unionAll(list1,list2,list3) ;System.out.println(union); // [1, 2, 3]
1.2:isEmpty(Collection coll):判断集合是否为空,如下:
  List<String> list1 = Arrays.asList("1");  List<String> list2 = Arrays.asList("2") ;  List<String> list3 = Arrays.asList("3") ;  List<String> union = (List<String>) unionAll(list1,list2,list3) ;  // 集合为null 或者集合的size为0 返回true ,其他情况返回false  System.out.println(CollectionUtils.isEmpty(union)); // false
TWO
MapUtils:对Map集合进行操作的工具类。
2.1:iterableMap(final Map<K, V> map)构建一个iterableMap,然后方便遍历、删除等等,这个遍历Map的写法比较高级也是比较的方便,开发中可以灵活去使用。以前我们遍历Map需要使用如下的方法,构建一个迭代器。
map.entrySet.iterator();现在你可以这样如下使用。
 Map<String, String> map = new HashMap<>(); map.put("key1", "zhangsan"); map.put("key2", "wangwu"); IterableMap<String, String> iterableMap = MapUtils.iterableMap(map); MapIterator<String, String> mapIterator = iterableMap.mapIterator(); while (mapIterator.hasNext()){     String key = mapIterator.getKey();     String value =mapIterator.getValue() ;     System.out.println(key);     System.out.println(value);   }
2.2:emptyIfNull(final Map<K,V> map) :如果Map为空帮你创建一个空的Map,代码如下,还是很好用的。
 Map<String,String> nullMap = null ; Map<String, String> map1 = MapUtils.emptyIfNull(nullMap); System.out.println(map1.size()); // 0 Map<String, String> map = new HashMap<>(); map.put("key1", "zhangsan"); map.put("key2", "wangwu"); Map<String, String> map2 = MapUtils.emptyIfNull(map); System.out.println(map2.size()); // 2
2.3:toProperties(final Map<K, V> map):把Map转换为Properties,开发中这方面的需求也是不少,这个也是很好用:
 Map<String, String> map = new HashMap<>(); map.put("key1", "zhangsan"); map.put("key2", "wangwu"); Properties properties = MapUtils.toProperties(map); System.out.println(properties); //  {key2=wangwu, key1=zhangsan}

THREE

SetUtils:对Set集合操作的工具类。
3.1:difference(final Set<? extends E> a, final Set<?extendsE> b):找到2个集合之间不同的元素。返回的是第一个集合里面有的,但是第二个集合里面没有的。开发中应用场景也是不少,比如找出我有的好友而你却没有的 代码如下:
 Set<String> set1 = new HashSet<>(); set1.add("a"); set1.add("b") ; Set<String> set2 = new HashSet<>(); set2.add("c") ; SetUtils.SetView<String> difference = SetUtils.difference(set1, set2); Iterator<String> iterator = difference.iterator();  while (iterator.hasNext()){   System.out.println(iterator.next()); } // 输出结果为 a,b。
3.2:disjunction(final Set<? extends E> a, final Set<? extends E> b) :找出2个集合之间不相同的元素。
 Set<String> set1 = new HashSet<>();  set1.add("a");  set1.add("b") ;  Set<String> set2 = new HashSet<>();  set2.add("c") ;  SetUtils.SetView<String> difference = SetUtils.disjunction(set1, set2);  Iterator<String> iterator = difference.iterator();  while (iterator.hasNext()){    System.out.println(iterator.next());   }   // 输出结果 a,b,c
3.3:intersection(final Set<? extends E> a, final Set<? extends E> b):获取2个集合的交集,这个用途比较广泛比如获取你们共同的朋友,共同的爱好,等等。代码如下:
  Set<String> set1 = new HashSet<>();  set1.add("a");  set1.add("b") ;  Set<String> set2 = new HashSet<>();  set2.add("b") ;  SetUtils.SetView<String> difference = SetUtils.intersection(set1, set2);  Iterator<String> iterator = difference.iterator();  while (iterator.hasNext()){      System.out.println(iterator.next());  }  // 输出结果:b

FOUR

ListUtils:对List操作的工具类,里面有一个很好用的方法,用在开发中会极大你写的代码的优雅性【因为自己写要写好长一段代码,我以前不知道这个工具的时候自己写过】,我是太喜欢这个方法了。
4.1:partition(final List<T> list, final int size) :List切割,把一个大的List分隔成许多的List。使用场景你在做数据库大批量新增或者更新的时候由于数据库有新增数据大小的限制,这个时候就需要做List的分割,然后再分批新增到数据库,代码如下:【这个类主要就想聊这个方法,其他的工具方法CollectionUtils都适用】。
 List<String> tempList = Arrays.asList("水星","金星","地球","火星","冥王星","土星",                "天王星","海王星","冥王星","木星"); List<List<String>> partition = ListUtils.partition(tempList, 6); System.out.println(partition);// 输出结果分割成了2个集合。// [[水星, 金星, 地球, 火星, 冥王星, 土星], [天王星, 海王星, 冥王星, 木星]]

FIVE

MultiValuedMap:多值的Map,一个key可以对应多个值,类适于这种结构:Map<String,List<Long>>。开发中我们会遇到相关的需求,你把数据结构转换为这样,开发的时候会变的So easy【太容易啦,领导终于不用担心我的开发技术水平了】。
5.1:ArrayListValuedHashMap:见名知意values的值采用List来存储【看看大神写的类,看到名字就知道干什么用的】,代码如下:
MultiValuedMap multiValuedMap = new ArrayListValuedHashMap() ;multiValuedMap.put("list","水星") ;multiValuedMap.put("list","金星") ;multiValuedMap.put("list","不是星星") ;System.out.println(multiValuedMap);// 输出结果:{list=[水星, 金星, 不是星星]}
5.2:HashSetValuedHashMap:见明知意values的值采用Set来存储,没有重复数据。复的数据,代码如下:
 MultiValuedMap multiValuedMap = new HashSetValuedHashMap() ; multiValuedMap.put("set","水星") ; multiValuedMap.put("set","金星") ; multiValuedMap.put("set","金星") ; multiValuedMap.put("set","不是星星") ; multiValuedMap.put("set1","地球") ; multiValuedMap.put("set1","土星") ; System.out.println(multiValuedMap); // 输出结果,自动去除了重复的值。{set=[金星, 不是星星, 水星],  set1=[地球, 土星]}

SIX

MultiMapUtils:MultiValuedMap操作的工具类,上面讲过这个Map了然后还提供了关于这个Map的工具类【这个框架真的是贴心啊】。
6.1:isEmpty(final MultiValuedMap<?, ?> map):判断是否为空,代码如下:
 MultiValuedMap multiValuedMap = new HashSetValuedHashMap() ; multiValuedMap.put("set","水星") ; multiValuedMap.put("set","金星") ; multiValuedMap.put("set","金星") ; multiValuedMap.put("set","不是星星") ; multiValuedMap.put("set1","地球") ; multiValuedMap.put("set1","土星") ; System.out.println(MultiMapUtils.isEmpty(multiValuedMap)); // false 
6.2:getCollection(final MultiValuedMap<K, V> map, final K key):返回key对应的集合,这个非常好用,直接根据key给你返回一个集合对象,代码如下:
MultiValuedMap multiValuedMap = new HashSetValuedHashMap() ;multiValuedMap.put("set","水星") ;multiValuedMap.put("set","金星") ;multiValuedMap.put("set","金星") ;multiValuedMap.put("set","不是星星") ;multiValuedMap.put("set1","地球") ;multiValuedMap.put("set1","土星") ;System.out.println(MultiMapUtils.getCollection(multiValuedMap,"set"));// 输出结果:[金星, 不是星星, 水星]
好了工具类篇,写了这三篇文章能满足你开发中大部分的常用的工具了,熟读并且灵活应用这三篇文章应该能让你在开发中少些很多代码,并且减少Bug的出现几率。毕竟这些代码都是经过很多人应用,然后才开源出来的。另外2篇文章分别是:

第二篇

xiaozhang ,公众号:程序员xiaozhangSpring工具类和commons-lang3工具类补充(工具类篇继续,助你写出优雅代码)

第一篇

xiaozhang ,公众号:程序员xiaozhang别在重复造轮子欢迎使用apache的commons-lang3工具-帮你书写优雅代码

欢迎大家关注我的微信公众号:程序员xiaozhang。给大家分享有用优质的文章。

图片

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值