Google Guava 使用工具类 - Lists

在 Java 中,Lists 是 Google Guava 提供的一个实用工具类,位于 com.google.common.collect 包中。它提供了一系列静态方法来简化对 List 类型的操作,特别是在创建、转换和处理列表时非常方便。

⚠️ 注意:Lists 不是 Java 标准库的一部分,而是来自 Guava(Google Core Libraries),使用前需要先引入依赖。


✅ 引入 Guava 依赖

如果你使用 Maven 构建项目,可以在 pom.xml 中添加以下依赖:

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>31.1-jre</version> <!-- 或更新的版本 -->
</dependency>

Gradle 用户可以这样添加:

implementation 'com.google.guava:guava:31.1-jre'

📚 Lists 常用方法介绍

1. 创建 List

import com.google.common.collect.Lists;

// 创建空的 ArrayList
List<String> list1 = Lists.newArrayList();

// 从可变参数创建
List<String> list2 = Lists.newArrayList("a", "b", "c");

// 从集合创建
List<Integer> list3 = Lists.newArrayList(Arrays.asList(1, 2, 3));

2. 分割 List(partition)

将一个大列表按固定大小分割成多个子列表:

List<Integer> numbers = Lists.newArrayList(1, 2, 3, 4, 5, 6, 7);
List<List<Integer>> parts = Lists.partition(numbers, 3);

// 输出: [[1, 2, 3], [4, 5, 6], [7]]
System.out.println(parts);

💡 如果原始列表长度不是块大小的整数倍,则最后一个子列表会包含剩余元素。

3. 反转 List

List<String> original = Lists.newArrayList("a", "b", "c");
List<String> reversed = Lists.reverse(original);

// 输出: [c, b, a]
System.out.println(reversed);

注意:返回的是原列表的视图,修改会影响原列表。

4. 创建 LinkedList

LinkedList<String> linkedList = Lists.newLinkedList();
linkedList.add("first");
linkedList.add("second");

5. 创建容量指定的 ArrayList(避免频繁扩容)

List<String> list = Lists.newArrayListWithCapacity(10);

或根据预计元素数量初始化:

List<String> list = Lists.newArrayListWithExpectedSize(20);

6. 转换为不可变列表(Java 9+ 的替代方式)

虽然 Guava 没有直接提供 List.of(...) 这样的方法,但你可以结合 ImmutableList 使用:

import com.google.common.collect.ImmutableList;

ImmutableList<String> immutableList = ImmutableList.copyOf(list2);

🔁 和 Java 8 Stream 的对比

功能 Guava Lists Java 8+ Streams
创建列表 Lists.newArrayList(...) Arrays.asList(...), new ArrayList<>(...)
分割列表 Lists.partition() ❌ 无直接支持(需自定义)
反转列表 Lists.reverse() ❌ 无直接支持(可用 Collections.reverse()
函数式操作 ❌(推荐用 Stream) map, filter, collect

🧩 示例代码汇总

import com.google.common.collect.Lists;
import java.util.Arrays;

public class ListsExample {
    public static void main(String[] args) {
        // 创建
        List<String> list = Lists.newArrayList("apple", "banana", "cherry");

        // 分割
        List<List<String>> parts = Lists.partition(list, 2);
        System.out.println("Partitioned: " + parts);  // [[apple, banana], [cherry]]

        // 反转
        List<String> reversed = Lists.reverse(list);
        System.out.println("Reversed: " + reversed);  // [cherry, banana, apple]

        // 创建 LinkedList
        LinkedList<String> linked = Lists.newLinkedList();
        linked.add("one");
        linked.add("two");

        // 初始化带容量的 ArrayList
        List<String> capList = Lists.newArrayListWithCapacity(10);
    }
}

✅ 总结

方法 用途
newArrayList() 创建新的 ArrayList
partition() 将列表按大小切分
reverse() 获取列表的逆序视图
newLinkedList() 创建新的 LinkedList
newArrayListWithCapacity() 预分配容量以提高性能

📌 小贴士

  • Guava 的 Lists 更适合与旧版 Java(如 Java 7)配合使用。
  • 在 Java 9+ 中,很多功能可以用标准库替代,例如:
    • List.of(...) 创建不可变列表;
    • Collectors.toList() 处理流数据;
  • 但在需要高级功能(如 partition)时,Guava 依然是强大补充。

如果你想了解 Lists.partition() 的底层原理或如何自己实现类似功能,我也可以详细说明!是否需要?

posted @ 2025-06-23 16:09  chuangzhou  阅读(167)  评论(0)    收藏  举报