我一直在为此头疼
我想创建一个区间列表(作为 Tuple2 实例),其范围min
介于.max
numberOfIntervals
这个特定的项目在 java 中(不允许使用 scala),所以我使用的是 vavr,但我可以将任何 scala 解决方案转换为 vavr
这是我的解决方案:
final int numberOfIntervals = 7;
final int min = 1;
final int max = 100;
final int targetSize = (max - min) / numberOfIntervals + 1;
final List<Tuple2<Integer, Integer>> l = Iterator.rangeClosed(min, max)
.grouped(targetSize)
.map(l -> Tuple.of(l.head(), l.last())).toList();
这有效:
(1, 15)
(16, 30)
(31, 45)
(46, 60)
(61, 75)
(76, 90)
(91, 100)
但这会创建很长的中介列表。我也一直在玩这样的东西:
final int numberOfIntervals = 7;
final int min = 1;
final int max = 100;
final int targetSize = (max - min) / numberOfIntervals + 1;
final List<Tuple2<Integer, Integer>> l = Iterator
.rangeClosedBy(min, max + targetSize, targetSize).sliding(2)
.map(s -> of(s.get(0), s.get(1) - 1))
.toList();
但是最后一个范围大于最大值:
(1, 15)
(16, 30)
(31, 45)
(46, 60)
(61, 75)
(76, 90)
(91, 105)