【发布时间】:2016-04-18 14:14:29
【问题描述】:
所以我有一个列表如下,带有 lambda 表达式:
ArrayList<String> array = new ArrayList<>();
...
StringBuffer buf = new StringBuffer("");
array.stream().forEach((item) -> {
buf.append("Counter here: " + item.toString() + "\n");
});
return buf.toString();
但是我不能在forEach lambda 表达式中实例化和修改变量,因为它必须是final。有什么办法可以做到吗?
【问题讨论】:
-
我不明白。你想要每个元素的索引吗?
-
是的,或者只是一个计数器,例如 '0: ...' 和 '1: ...'
-
MutableInteger 在 apache-lang 中可用,其开销比 AtomicInteger 少。还要避免使用 StringBuffer 作为局部变量使用 StringBuilder (StringBuffer 是同步的,而 StringBuilder 不是,除非您要使用多个线程更新该缓冲区,否则会产生额外的成本而没有好处)。