>

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提供了许多LinkedListArrayList优雅创建集合的工厂方法,如通过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);
复制代码

 

 

参考文章:

https://www.jianshu.com/p/29334a4453f3

posted @   字节悦动  阅读(466)  评论(0编辑  收藏  举报
编辑推荐:
· 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 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示

目录导航