问题
Not for-each block:
public void cleanup4(){
long timestamp = Instant.now().minus(90l, ChronoUnit.DAYS)
.toEpochMilli();
String cql = "SELECT * FROM usertoken";
ResultSet rs = CassandraTools.getInstance().execute(cql,ConsistencyLevel.QUORUM);
CassandraConverter cassandraConverter=new MappingCassandraConverter();
CassandraConverterRowCallback<UserTokenCassandra> callback= new CassandraConverterRowCallback<UserTokenCassandra>(cassandraConverter, UserTokenCassandra.class);
UserTokenCassandra utc = null;
Iterator<Row> iterator = rs.iterator();
while (iterator.hasNext()) {
Row row = iterator.next();
utc=callback.doWith(row);
log.info("{}", utc);
log.info("记录的时间为:{}",
Instant.ofEpochMilli(utc.getExpireTime()));
if (timestamp > utc.getExpireTime()) {
// repository.delete(n);
}
}
}
For-each block:
public void cleanup4(){
long timestamp = Instant.now().minus(90l, ChronoUnit.DAYS)
.toEpochMilli();
String cql = "SELECT * FROM usertoken";
ResultSet rs = CassandraTools.getInstance().execute(cql,ConsistencyLevel.QUORUM);
CassandraConverter cassandraConverter=new MappingCassandraConverter();
CassandraConverterRowCallback<UserTokenCassandra> callback= new CassandraConverterRowCallback<UserTokenCassandra>(cassandraConverter, UserTokenCassandra.class);
rs.forEach(usertoken->{
UserTokenCassandra utc = null;
log.info("{}", utc);
log.info("The Time:{}",
Instant.ofEpochMilli(utc.getExpireTime()));
if (timestamp > utc.getExpireTime()) {
// repository.delete(utc);
}
});
}
1.The for-each block seems generate a lot no use reference of UserTokenCassandra .. And are these garbage? 2.So How to write this code?
回答1:
You cannot modify the outer method local variable from within the lambda body. Here you don't need the forEach. As ResultSet implements Iterable, you can use enhanced for loop instead:
for(Row row : rs) {
utc=callback.doWith(row);
log.info("{}", utc);
log.info("记录的时间为:{}",
Instant.ofEpochMilli(utc.getExpireTime()));
if (timestamp > utc.getExpireTime()) {
// repository.delete(n);
}
}
来源:https://stackoverflow.com/questions/32561029/how-to-change-the-local-variable-of-the-outer-method-in-the-lambdas-foreach-bloc