原创 xiaozhang 程序员xiaozhang 2023-07-12 23:12 发表于上海
收录于合集#Java27个
开发中我们常常会遇到对集合的操作,使用这个类库能简化你的代码,从而提高你的工作效率,让你从大量的底层代码中抽身。工欲善其事必先利其器,希望我介绍以后大家在开发中多多去使用这些工具类,让它们成为你在开发中的大利器。
要使用这个这些工具类首先要引入如下的jar包:
org.apache.commons
commons-collections4
4.1
如下是它的包结构,里面有很多好用的工具类。
好了让我们开始介绍相关的工具类。
ONE
CollectionUtils:集合操作的工具类,开发中会常常的使用。
1.1:union(final Iterable extends O> a, final Iterable extends O> b):两个集合的连接,类似于ORACLE数据库union all的功能。
List
list1 = Arrays.asList("1"); List
list2 = Arrays.asList("2") ; List
union = (List ) CollectionUtils. union(list1, list2);
System.out.println(union); // [1, 2]
************************************
由于后面的段落也不知道是工具的原因,
还是什么的问题段落就是对不齐,所以
我把很多字放在了代码里面。这样看的
更好看一些。我修改了很久样式就是不对。
************************************
当然我们扩展一下功能,可以传递多个参数的方法。在开发中应用更广泛一些如下
代码:【极力推荐大家去使用】。
// 扩展的util方法,这个是可以传递多个集合的,底层还是使用union方法。
// 这个也是告诉大家去读他们源码的重要性,自己也就很容易去扩展,极大的
// 提高了我们的开发效率。
private static
Collection unionAll(Collection coll1, Collection
coll2, Collection ... otherColls){ // 底层还是使用的union方法。
Collection
union = CollectionUtils.union(coll1, coll2); for (Collection
coll : otherColls) { union = CollectionUtils.union(union, coll);
}
return union;
}
// 使用如下:
List
list1 = Arrays.asList("1"); List
list2 = Arrays.asList("2") ; List
list3 = Arrays.asList("3") ; List
union = (List ) unionAll(list1,list2,list3) ; System.out.println(union); // [1, 2, 3]
1.2:isEmpty(Collection coll):判断集合是否为空,如下:
List
list1 = Arrays.asList("1"); List
list2 = Arrays.asList("2") ; List
list3 = Arrays.asList("3") ; List
union = (List ) unionAll(list1,list2,list3) ; // 集合为null 或者集合的size为0 返回true ,其他情况返回false
System.out.println(CollectionUtils.isEmpty(union)); // false
MapUtils:对Map集合进行操作的工具类。
2.1:iterableMap(final Map
map)构建一个iterableMap,然后 方便遍历、删除等等,这个遍历Map的写法比较高级也是比较的方便,开发中可以
灵活去使用。以前我们遍历Map需要使用如下的方法,构建一个迭代器。
map.entrySet.iterator();现在你可以这样如下使用。
Map
map = new HashMap<>(); map.put("key1", "zhangsan");
map.put("key2", "wangwu");
IterableMap
iterableMap = MapUtils.iterableMap(map); MapIterator
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
map) :如果Map为空帮你创建一个 空的Map,代码如下,还是很好用的。
Map
nullMap = null ; Map
map1 = MapUtils.emptyIfNull(nullMap); System.out.println(map1.size()); // 0
Map
map = new HashMap<>(); map.put("key1", "zhangsan");
map.put("key2", "wangwu");
Map
map2 = MapUtils.emptyIfNull(map); System.out.println(map2.size()); // 2
2.3:toProperties(final Map
map):把Map转换为Properties ,开发中这方面的需求也是不少,这个也是很好用:
Map
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
set1 = new HashSet<>(); set1.add("a");
set1.add("b") ;
Set
set2 = new HashSet<>(); set2.add("c") ;
SetUtils.SetView
difference = SetUtils.difference(set1, set2); Iterator
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
set1 = new HashSet<>(); set1.add("a");
set1.add("b") ;
Set
set2 = new HashSet<>(); set2.add("c") ;
SetUtils.SetView
difference = SetUtils.disjunction(set1, set2); Iterator
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
set1 = new HashSet<>(); set1.add("a");
set1.add("b") ;
Set
set2 = new HashSet<>(); set2.add("b") ;
SetUtils.SetView
difference = SetUtils.intersection(set1, set2); Iterator
iterator = difference.iterator(); while (iterator.hasNext()){
System.out.println(iterator.next());
}
// 输出结果:b
FOUR
ListUtils:对List操作的工具类,里面有一个很好用的方法,用在开发中会
极大你写的代码的优雅性【因为自己写要写好长一段代码,我以前不知道这个工具
的时候自己写过】,我是太喜欢这个方法了。
4.1:partition(final List
list, final int size) :List切割, 把一个大的List分隔成许多的List。使用场景你在做数据库大批量新增或者更新的
时候由于数据库有新增数据大小的限制,这个时候就需要做List的分割,然后再
分批新增到数据库,代码如下:【这个类主要就想聊这个方法,其他的工具方法
CollectionUtils都适用】。
List
tempList = Arrays.asList("水星","金星","地球","火星","冥王星","土星", "天王星","海王星","冥王星","木星");
List
> partition = ListUtils.partition(tempList, 6);
System.out.println(partition);
// 输出结果分割成了2个集合。
// [[水星, 金星, 地球, 火星, 冥王星, 土星], [天王星, 海王星, 冥王星, 木星]]
FIVE
MultiValuedMap:多值的Map,一个key可以对应多个值,类适于这种结构:
Map
>。开发中我们会遇到相关的需求,你把数据结构 转换为这样,开发的时候会变的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
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。给大家分享有用优质的文章。