我想创建一系列整数,最好是一个IntStream
,满足某种条件。以下是一些简单的示例来解释我要做什么:
前10个从0开始的偶数序列(在这里我没有问题,我可以使用下面的代码片段)
IntStream.iterate(0, i -> i + 2).limit(10);
//0,2,4,6,8,10,12,14,16,18
按照交替加2和3的规律,从0开始输出前10个数字的序列;期望输出:
//0,2,5,7,10,12,15,17,20,22
我也很想在这种情况下使用
IntStream.iterate()
或IntStream.generate()
,但是我自己搞不定。我使用经典的for循环,虽然可以工作,但对于这样一个相对简单的任务来说有点冗长。List<Integer> list = new ArrayList<>();
list.add(0);
for(int i = 1, j = 1; i < 10; i++, j *= -1){
if(j > 0){
list.add(list.get(i-1) + 2);
}
else{
list.add(list.get(i-1) + 3);
}
}
//and then stream over the list to get IntStream
list.stream().mapToInt(Integer::intValue);
有没有一种使用IntStream.iterate()
或IntStream.generate()
实现与上述相同的简单方法?
对于三个或更多的交替值,我不知道如何优雅地实现它。例如,如果我想通过交替添加+2、+5和+7到前一个数字来创建从0开始的前10个数字序列,并得到所需的输出:
//0,2,7,14,16,21,28,30,35,42
我考虑在for循环中使用i%3
和3个if-else块或switch case,但是当我需要更多交替值时,这些块将会增长,我需要添加更多的ifs
或cases
。有什么想法吗?如果您认为IntStream.iterate()
或IntStream.generate()
不是解决所描述任务的合适方法,我也可以接受其他方法。