我正在寻找将以下for循环替换为优雅的java 8流或lambda解决方案。有什么简洁高效的方法吗?
public static void main(String[] args) {
ArrayList<Integer> myList = new ArrayList<>( Arrays.asList( 10,-3,5));
// add 1/2 of previous element to each element
for(int i =1 ;i < myList.size(); ++i )
myList.set(i, myList.get(i)+myList.get(i-1)/2);
// myList.skip(1).forEach( e -> e + prevE/2 ); // looking for something in this spirit
}
您的循环评估依赖于先前评估的结果。相当于
for(int i = 1, value = myList.get(0); i < myList.size(); i++ ) {
value = myList.get(i) + value/2;
myList.set(i, value);
}
使用Stream
API或lambda表达式并没有真正的简化。实际上,我更喜欢上面显示的变体,即使它变大而不是变小,因为它可以清楚地说明实际发生的情况(并且可以通过避免多次List
查找来提高效率)。
如果创建一个新的,它还允许您独立编程位置List
:
List<Integer> srcList = Arrays.asList(10, -3, 5), dstList = new ArrayList<>();
int value = 0;
for(Integer i: srcList) {
value = i + value/2;
dstList.add(value);
}
问题内容: 我有下面的简单代码,我试图将其转换为功能样式 是否可以轻松地用流替换此循环?我看到的唯一选择是使用两个不同的过滤条件在流上迭代两次。 问题答案: 听起来您可以只使用以下条件: 简短但完整的示例,将短字符串映射为小写,将长字符串映射为大写:
问题内容: 我程序的想法是从以前保存在其他JFrame中的列表中选择一个名称。我想在标签中一个接一个地打印所有名称,它们之间的间隔很小,然后停在其中一个名称上。问题是,如果有多个代码,则无法正常工作。 这是我的代码的一部分: 问题答案: 不要使用循环或。只需使用即可。以下将导致每1000毫秒发生30 次迭代 。您可以相应地调整代码,使其适应每隔毫秒发生一次的情况。 如果需要,您可以在构造函数中设置
我有一个网络应用编程接口,多个列表,和一个从网络应用编程接口查询数据的函数。我已经设法手动更新列表,一次一个。然而,数据有多个列(列表将包含列的数据),并且有38个列表并手动调用函数来更新它们是很麻烦的。我设计了一个简短的for循环来迭代列表,并相应地更新它们。但是,更新后的列表不会返回;或者甚至没有更新。如何在代码中修复此问题?请参阅下面的代码,虽然我不能提供API上的数据: =========
问题内容: 我有一段代码,但是我想提高性能。我的代码是: matrix2是4维np数组,而matrix1是2d数组。 我想通过使用np.tensordot(matrix1,matrix2)加快此代码的速度,但是后来我迷路了。 问题答案: 您可以只使用jit编译器 您的解决方案一点也不差。我唯一更改的是索引和变量循环范围。如果您有numpy数组和过多的循环,则可以使用编译器(Numba),这确实很简
我试图在for循环中获得for循环,因此输出如下: 我希望输出显示一个正方形 我不知道它为什么不这样做。下面是我的代码:
问题内容: 我遇到了一个问题,在这里我想使用GUI从python程序运行几个命令行功能。我不知道我的问题是否特定于 PyQt4, 或者是否与我对Python代码的错误使用有关。 我希望做的是在GUI上有一个标签,以更改其文本值以通知用户正在执行哪个命令。但是,当我使用 for 循环运行多个命令时,就会出现我的问题。我希望标签在每个循环中进行更新,但是,该程序不是在每个循环中更新GUI标签,而是仅在