【发布时间】:2021-05-01 22:48:21
【问题描述】:
实现一个滑动窗口我已经写了这个:
import java.text.ParseException;
import java.util.Arrays;
import java.util.List;
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class PreProcess {
public static <T> Stream<List<T>> createSlidingWindow(List<T> list, int size) {
if(size > list.size())
return Stream.empty();
return IntStream.range(0, list.size()-size+1)
.mapToObj(start -> list.subList(start, start+size));
}
public static void main(String args[]) throws ParseException {
Stream<List<Integer>> sw = createSlidingWindow(Arrays.asList(1, 2, 3, 4 ,5) , 3);
sw.forEach(x -> {
System.out.println(x);
});
}
}
执行此代码打印:
[1, 2, 3]
[2, 3, 4]
[3, 4, 5]
我正在尝试修改,以便每个窗口之间没有重叠,因此将返回大小为 3 的滑动窗口:
[1, 2, 3]
[4, 5]
我想我需要修改 start 使其指向下一个窗口,但我不确定如何使用流来实现这一点。
【问题讨论】:
-
您是指子列表/分区而不是滑动窗口吗?
标签: java java-8 java-stream