Java 将循环转换为lambda和streams
我有这段代码,并且花了一些时间尝试使用lambda表达式和流将其转换为for循环,但是失败了Java 将循环转换为lambda和streams,java,lambda,java-8,java-stream,Java,Lambda,Java 8,Java Stream,我有这段代码,并且花了一些时间尝试使用lambda表达式和流将其转换为for循环,但是失败了 for(int i = 0, j = 308; i < 17;i++, j -= 18) { if(consoleMessages[i] != null) { newBoldFont.drawBasicString(consoleMessages[i], 9, j, 16777215, 0); } }
for(int i = 0, j = 308; i < 17;i++, j -= 18) {
if(consoleMessages[i] != null) {
newBoldFont.drawBasicString(consoleMessages[i], 9, j, 16777215, 0);
}
}
如果你坚持
IntStream.range(0, 17)
.forEach(
i-> {
if(consoleMessages[i] != null)
newBoldFont.drawBasicString(consoleMessages[i], 9, 308 - 18 * i, 16777215, 0);
});
。。。但为什么会有人想这么做呢?循环是完美的,它是可读的,它是可以理解的。保持代码原样。显示您已尝试过的内容。使用
过滤器
操作,流代码将显著改善…@Holger是的,但这样会失去与索引的关系。或者你知道怎么保存这个吗?(除了在数组中进行搜索以确定索引或使用中间的“pair”对象之外。)我不是说map
ping,只是过滤,.filter(I->consoleMessages[I]!=null)。forEach(I->newBoldFont.rubsicstring(consoleMessages[I],9308-18*I,16777215,0))
…
IntStream.range(0, 17)
.forEach(
i-> {
if(consoleMessages[i] != null)
newBoldFont.drawBasicString(consoleMessages[i], 9, 308 - 18 * i, 16777215, 0);
});