Lists.partition
时间: 2023-07-01 07:18:09 浏览: 231
`Lists.partition` 是 Google Guava 中提供的一个方法,用于将一个列表按照指定大小分成若干个子列表。
方法签名如下:
```java
public static <T> List<List<T>> partition(List<T> list, int size)
```
其中,`list` 表示要进行分组的列表,`size` 表示每个子列表的大小。返回值是一个 `List<List<T>>` 类型的列表,其中每个元素都是原始列表中的若干个元素组成的子列表。
需要注意的是,最后一个子列表的大小可能会小于指定的 `size`。如果 `size` 小于等于 0,或者 `list` 为 null,都会抛出 `IllegalArgumentException` 异常。
例如,假设我们有一个包含 10 个元素的列表:
```java
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
```
我们可以使用 `Lists.partition` 方法将列表分成大小为 3 的子列表:
```java
List<List<Integer>> subLists = Lists.partition(list, 3);
```
得到的 `subLists` 列表包含了 4 个子列表:
```
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]
```
最后一个子列表只包含了一个元素。
相关问题
Lists.partition和 set partition
`list.partition()` 和 `set.partition()` 是两种不同的方法,用于不同的数据类型。
`list.partition()` 是 Python 内置的列表方法,它接受一个谓词函数作为参数,并将列表拆分为两个部分:满足谓词函数的元素和不满足谓词函数的元素。它返回一个元组,其中第一个元素是满足谓词函数的元素列表,第二个元素是不满足谓词函数的元素列表,第三个元素是剩余的元素列表(如果有的话)。
例如,假设我们有一个整数列表 `[1, 2, 3, 4, 5, 6]`,我们想要将它们分为奇数和偶数两部分,可以使用 `list.partition()` 方法:
```python
nums = [1, 2, 3, 4, 5, 6]
odd, even, rest = nums.partition(lambda x: x % 2 != 0)
print(odd) # [1, 3, 5]
print(even) # [2, 4, 6]
print(rest) # []
```
`set.partition()` 并不是 Python 内置的方法,因为 `set` 类型本身就不保留项目的顺序。因此,`set.partition()` 不是一个有效的方法。
不过,我们可以通过手动编写代码来模拟 `set.partition()` 的行为。例如,假设我们有一个字符串集合 `{'apple', 'banana', 'cherry', 'date'}`,我们想要将它们分为两部分:以字母 'a' 开头的字符串和不以字母 'a' 开头的字符串。我们可以使用以下代码:
```python
strings = {'apple', 'banana', 'cherry', 'date'}
a_start = set(filter(lambda s: s.startswith('a'), strings))
not_a_start = strings - a_start
print(a_start) # {'apple'}
print(not_a_start) # {'banana', 'cherry', 'date'}
```
这段代码使用了 Python 内置的 `filter()` 函数和 `set` 类型的差集运算。它首先使用 `filter()` 函数找到以字母 'a' 开头的字符串,然后使用差集运算将它们从原始集合中移除,得到不以字母 'a' 开头的字符串集合。
Lists.partition 使用
Lists.partition 是 Google Guava 库中提供的一个方法,用于将一个 List 集合分割成多个指定大小的小集合。使用该方法可以方便地将一个大的集合分割成多个小集合,以便于进行批量操作。
下面是使用 Lists.partition 方法的示例代码:
```java
import com.google.common.collect.Lists;
import java.util.List;
public class PartitionExample {
public static void main(String[] args) {
List<Integer> list = Lists.newArrayList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<List<Integer>> partitions = Lists.partition(list, 3);
for (List<Integer> partition : partitions) {
System.out.println(partition);
}
}
}
```
输出结果为:
```
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
[10]
```
上述代码中,我们首先创建了一个包含 10 个元素的 List 集合,然后使用 Lists.partition 方法将该集合分割成每个小集合包含 3 个元素的若干个小集合。最后,我们遍历每个小集合并输出其内容。
阅读全文