使用包装器
任何一种包装都是好的。
在Java 10+中,请使用此构造,因为它非常容易设置:
var wrapper = new Object(){ int ordinal = 0; };
list.forEach(s -> {
s.setOrdinal(wrapper.ordinal++);
});
对于 Java 8+,请使用 AtomicInteger
:
AtomicInteger ordinal = new AtomicInteger(0);
list.forEach(s -> {
s.setOrdinal(ordinal.getAndIncrement());
});
...或数组:
int[] ordinal = { 0 };
list.forEach(s -> {
s.setOrdinal(ordinal[0]++);
});
注意:如果使用并行流,请非常小心。您可能最终得不到预期的结果。像斯图尔特这样的其他解决方案可能更适合这些情况。
对于非int
当然,这对于 除 以外的类型仍然有效。int
例如,使用Java 10 +:
var wrapper = new Object(){ String value = ""; };
list.forEach(s->{
wrapper.value += "blah";
});
或者,如果您坚持使用Java 8或9,请使用与我们上面相同的构造,但是使用AtomicReference
...
AtomicReference<String> value = new AtomicReference<>("");
list.forEach(s -> {
value.set(value.get() + s);
});
...或数组:
String[] value = { "" };
list.forEach(s-> {
value[0] += s;
});