Java 8 如何从列表中创建惊人的列表

Java 8 如何从列表中创建惊人的列表,java-8,java-stream,Java 8,Java Stream,假设我们有一个列表: [1,2,3,4,5,6,7] 对于给定的长度,例如3,我想创建一个列表,其中包含: [1,2,3] [2,3,4] [3,4,5] ... 子列表中的元素数为指定的长度(3) 我知道如何在plan Java中实现这一点: List<List<Integer>> function(List<Integer> s, int m) { if(s.size() < m) throw new IllegalArgumentExc

假设我们有一个列表:

[1,2,3,4,5,6,7]
对于给定的长度,例如
3
,我想创建一个列表,其中包含:

[1,2,3]
[2,3,4]
[3,4,5]
...
子列表中的元素数为指定的长度(3)

我知道如何在plan Java中实现这一点:

List<List<Integer>> function(List<Integer> s, int m) {
    if(s.size() < m) throw new IllegalArgumentException();
    List<List<Integer>> result = new ArrayList<>();
    for(int i = 0 ; i < s.size() - m + 1 ; i ++) {
        List<Integer> sub = s.subList(i, i+m);
        result.add(sub);
    }
    return result;
}
List函数(List s,int m){
如果(s.size()
但我想知道如何使用Java8流来实现它


有人能帮忙吗?

好的。我是这样锻炼的:

List<List<Integer>> function(List<Integer> s, int m) {
     return IntStream.range(0, s.size() - m + 1).mapToObj(index -> s.subList(index, index + m)).collect(Collectors.toList());
}
List函数(List s,int m){
返回IntStream.range(0,s.size()-m+1).mapToObj(index->s.subList(index,index+m)).collect(Collectors.toList());
}

我的测试表明它是正确的。但是有更好的解决方案吗?

“我知道如何在plan Java中实现它”请显示plan Java代码添加的代码。