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() 的底层原理或如何自己实现类似功能,我也可以详细说明!是否需要?
本文来自博客园,作者:chuangzhou,转载请注明原文链接:https://www.cnblogs.com/czzz/p/18944538

浙公网安备 33010602011771号