寻找连续对
如果您愿意使用第三方库并且不需要并行性,那么jOOλ提供如下的SQL样式窗口函数
System.out.println(
Seq.of(0, 1, 2, 3, 4)
.window()
.filter(w -> w.lead().isPresent())
.map(w -> tuple(w.value(), w.lead().get())) // alternatively, use your new Pair() class
.toList()
);
屈服
[(0, 1), (1, 2), (2, 3), (3, 4)]
的 lead()
函数从窗口中按遍历顺序访问下一个值。
查找连续的三元组/四元组/ n元组
评论中的一个问题是寻求一个更通用的解决方案,在该解决方案中,不应该收集对,而应该收集n元组(或可能的列表)。因此,这是另一种方法:
int n = 3;
System.out.println(
Seq.of(0, 1, 2, 3, 4)
.window(0, n - 1)
.filter(w -> w.count() == n)
.map(w -> w.window().toList())
.toList()
);
产生清单清单
[[0, 1, 2], [1, 2, 3], [2, 3, 4]]
没有filter(w -> w.count() == n)
,结果将是
[[0, 1, 2], [1, 2, 3], [2, 3, 4], [3, 4], [4]]
免责声明:我在jOOλ背后的公司工作