通过jdk8 stream 实现将list切割成三等分
时间: 2023-12-28 20:03:40 浏览: 40
使用 JDK 8 中的 Stream API,你可以通过以下方式将 List 切割成三等分:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class ListDivider {
public static List<List<Integer>> divideList(List<Integer> originalList) {
int totalSize = originalList.size();
int partitionSize = totalSize / 3;
List<List<Integer>> dividedLists = IntStream.range(0, totalSize)
.boxed()
.collect(Collectors.groupingBy(index -> index / partitionSize))
.values()
.stream()
.map(indices -> indices.stream()
.map(originalList::get)
.collect(Collectors.toList()))
.collect(Collectors.toList());
return dividedLists;
}
public static void main(String[] args) {
List<Integer> originalList = new ArrayList<>();
originalList.add(1);
originalList.add(2);
originalList.add(3);
originalList.add(4);
originalList.add(5);
originalList.add(6);
originalList.add(7);
originalList.add(8);
originalList.add(9);
List<List<Integer>> dividedLists = divideList(originalList);
System.out.println(dividedLists);
}
}
```
在上述示例中,我们使用 IntStream 来生成一个从 0 到 totalSize 的索引流。然后,我们通过 `groupingBy` 方法将索引按照 partitionSize 进行分组,将每个索引映射到对应的子列表。最后,我们通过 `map` 方法将索引转换为原始列表中的元素,并使用 `Collectors.toList()` 收集为子列表。最终,我们得到了包含三个切割后子列表的列表。
你可以运行示例代码来验证结果,输出应为 `[[1, 2, 3], [4, 5, 6], [7, 8, 9]]`。