我想知道什么时候可以有效地使用intstream.range
。我不确定intstream.range
到底有多有用,有三个原因。
(请将start和end视为整数。)
>
如果我想要一个数组,[start,start+1,...,end-2,end-1]
,下面的代码要快得多。
int[] arr = new int[end - start];
int index = 0;
for(int i = start; i < end; i++)
arr[index++] = i;
我不认为仅仅获取从start
到end-1
的int
数字是有用的。我可以将用于(int I=start;I
您能告诉我什么时候应该选择
intstream.range
吗?
intstream.range
有几种用法。
一种是使用int
值本身:
IntStream.range(start, end).filter(i -> isPrime(i))....
还有一种是做了N次的事情:
IntStream.range(0, N).forEach(this::doSomething);
int[] arr = IntStream.range(start, end).toArray();
int[] arr = new int[end - start];
IntStream.range(0, end - start).forEach(i -> arr[i] = i + start);
有一个实用工具方法arrays.setall
可以更简洁地完成此操作:
int[] arr = new int[end - start];
Arrays.setAll(arr, i -> i + start);
还有arrays.parallelhtml" target="_blank">setall
可以并行填充现有数组。在内部,它只是使用intStream
并在其上调用Parallel()
。这将为多核系统上的大型阵列提供加速。
我发现关于堆栈溢出的许多答案都涉及到使用intstream.range
。您可以使用“搜索”框中的以下搜索条件搜索它们:
user:1441122 IntStream.range
例如,假设您想要找到数组中数行数增加的位置。结果是第一个数组中的索引数组,其中每个索引指向运行的开始。
要计算这个值,请注意运行开始于该值小于前一个值的位置。(运行也从位置0开始)。因此:
int[] arr = { 1, 3, 5, 7, 9, 2, 4, 6, 3, 5, 0 };
int[] runs = IntStream.range(0, arr.length)
.filter(i -> i == 0 || arr[i-1] > arr[i])
.toArray();
System.out.println(Arrays.toString(runs));
[0, 5, 8, 10]
当然,您可以使用for-loop来完成此操作,但我发现在许多情况下使用intstream
更好。例如,使用toArray()
很容易将未知数量的结果存储到数组中,而使用for-loop则必须处理复制和调整大小,这会分散循环的核心逻辑。
问题内容: 有什么区别?什么时候应该使用容量为1的对抗? 问题答案: SynchronousQueue更像是一个传递,而LinkedBlockingQueue仅允许单个元素。区别在于对SynchronousQueue的put()调用直到有相应的take()调用 才返回 ,但LinkedBlockingQueue的大小为1,则put()调用(对空队列)将立即返回。 我不能说自己曾经直接使用过Sync
问题内容: 我对使用和翻译有疑问。我了解到,在模型中,我应该使用。但是还有其他地方我也应该使用吗?表单定义呢?它们之间是否存在性能差异? 编辑: 还有一件事。有时候,代替被使用。正如文档所述,仅在将字符串显示给用户之前,才将字符串标记为要翻译,并在可能的最新情况下进行翻译,但是我在这里有点困惑,这与功能相似吗?我仍然很难决定在模型和表格中应该使用哪个。 问题答案: ugettext() 与 uge
问题内容: 我知道他们两个都禁用了Nagle的算法。 我什么时候应该/不应该使用它们中的每一个? 问题答案: 首先,不是所有人都禁用Nagle的算法。 Nagle的算法用于减少有线中更多的小型网络数据包。该算法是:如果数据小于限制(通常是MSS),请等待直到收到先前发送的数据包的ACK,同时累积用户的数据。然后发送累积的数据。 这将对telnet等应用程序有所帮助。但是,在发送流数据时,等待A
问题内容: 在该类中,有两个字符串,和。 有什么不同?我什么时候应该使用另一个? 问题答案: 如果你的意思是和则: 用于在文件路径列表中分隔各个文件路径。考虑在上的环境变量。您使用a分隔文件路径,因此在上将是;。 是或用于拆分到特定文件的路径。例如在上,或
有没有人遇到过使用场景?由于是默认选项,我看不到你什么时候会使用它。
问题内容: 一个理想的例子是什么时候确切地使用Java中的特定接口,以及适用的任何特定规则。 问题答案: 集合框架是一个不错的选择。 因此,你可以编写如下代码: 如果将来你想使用say 或自己的界面更改实现,那么你要做的就是将第一行更改为: 其余代码将继续进行。