Guava Lists工具类
一、概述
Guava
是 Google
开源的一个 Java
工具库,里面有很多工具类,本文要讲的是里面的Lists
工具类。
依赖
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>28.0</version> </dependency>
二、Lists工具类
从下图可以看到Lists
工具类有很多种方法:
1、集合分区方法 - partition()
partition(List<T> list, int size)
方法可以将指定的集合list
通过一个指定分区大小size
的参数,进行分区.返回List<List<T>>
对象.
//测试partition()方法 List<List<Integer>> partitionList = Lists.partition(testList, 2); System.out.println("===================测试partition()结果=================" + partitionList); testList.remove(2); System.out.println(testList); System.out.println("===================测试partition()方法结果=================" + partitionList);
===================测试partition结果=================[[1, 2], [3, 4], [5]] [1, 2, 4, 5] ===================测试partition()方法结果=================[[1, 2], [4, 5]]
可以发现
partition()
方法确实按照期望值返回了.不过值得注意的是partition()
方法得到的结果并非是新创建的集合,集合中的元素是对原被分区集合的引用.被分区集合一发生变化则partition
的结果也跟着发生变化.ArrayList<Student> students = Lists.newArrayList( new Student("张三", 33), new Student("李四", 40), new Student("王五", 23), new Student("赵六", 55)); // 每页两条 List<List<Student>> partionStudent = Lists.partition(students, 2);
List<Integer> list=new ArrayList<>(); for (int i=0;i<500;i++){ list.add(i); } //分批次操作 List<List<Integer>> newList = Lists.partition(list, 150); for (List<Integer> list1:newList){ System.out.println(list1.size()); }
使用apache common collection功能类似
List<Integer> intList = Lists.newArrayList(1, 2, 3, 4, 5, 6, 7, 8);
List<List<Integer>> subs = ListUtils.partition(intList, 3);
2、集合倒序方法 - reverse()
reverse(List<T> list)
方法将返回指定集合的相反顺序集合.
//测试集合reverse()方法 List<Integer> reverseList = Lists.reverse(testList); System.out.println("==================测试reverse()方法结果=================" + reverseList); testList.remove(2); System.out.println(testList); System.out.println("==================测试reverse()方法结果=================" + reverseList);
==================测试reverse()方法结果=================[5, 4, 3, 2, 1] [1, 2, 4, 5] ==================测试reverse()方法结果=================[5, 4, 2, 1]
可以发现最终结果得到的是入参集合的反序集合,不过和
partition()
方法一样,集合中的元素仅仅是对原有集合的引用.如果想要得到新的集合,可以使用Stream().map().collect()
的方式.3、获取笛卡尔积方法 - cartesianProduct()
除了以上的方法外,Guava
还提供了求多个集合笛卡尔积的方法.
List<List<String>> cartesianProductList = Lists.cartesianProduct(Lists.newArrayList("A", "B", "C"), Lists.newArrayList("a1", "b1", "c1"));
System.out.println("=======测试cartesianProductList方法()========" + cartesianProductList);
=======测试cartesianProductList方法()========[[A, a1], [A, b1], [A, c1], [B, a1], [B, b1], [B, c1], [C, a1], [C, b1], [C, c1]]
4、静态工厂方法
Guava
提供了许多LinkedList
和ArrayList
优雅创建集合的工厂方法,如通过Base
、指定容量
、指定大小
等方式创建.官网对其描述如下:
//=========================测试创建arrayList============================ //测试通过Base创建list List<Integer> testListBase1 = Lists.newArrayList(); //通过Base创建list List<Integer> testListBase = Lists.newArrayList(1, 2, null); //通过指定容量创建list List<Integer> testListWithCapacity = Lists.newArrayListWithCapacity(7); //通过Iterable创建list List<Integer> testListWithIterable = Lists.newArrayList(Iterables.concat()); //通过Iterator创建list List<Integer> testListWithIterator = Lists.newArrayList(Iterators.concat()); //通过Arrays创建list List<Integer> testListWithArray = Lists.newArrayList(ArrayUtils.EMPTY_INTEGER_OBJECT_ARRAY); //通过指定大小创建list List<Integer> testListWithExpectedSize = Lists.newArrayListWithExpectedSize(6);
参考文章:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架