我希望用优雅的 java 8 流或 lambda 解决方案替换以下 for 循环。有没有什么简洁高效的东西?
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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)