我正在对 DynamoDB 表执行扫描,然后需要将返回的项目中的相应属性添加到类型列表中User
(User
有一个构造函数User(String uuid)
)。该代码当前成功扫描数据库并返回List
的扫描结果。然而,由于某种原因,我的迭代似乎返回 null。
AmazonDynamoDBClient client = dynamoClient.getDynamoClient();
DynamoDBMapper mapper = new DynamoDBMapper(client);
try {
DynamoDBScanExpression scanExpression = new DynamoDBScanExpression();
Map<String, Condition> scanFilter = new HashMap<String, Condition>();
Condition scanCondition =
new Condition().withComparisonOperator(ComparisonOperator.NOT_NULL);
scanFilter.put("uuid", scanCondition);
scanExpression.setScanFilter(scanFilter);
List scanResults = mapper.scan(UserAccounts.class, scanExpression);
for (Iterator it = scanResults.iterator(); it.hasNext();) {
//User user = (User) it.next();
allUserSummary.add(new User(scanResults.get(1).toString()));
}
} catch (Exception e) {
// TODO
}
我建议您开始通过以下方式使用现代且紧凑的列表迭代For-Each 循环 http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html,这有助于避免使用旧迭代样式时的许多常见错误:
[...]
迭代器只是混乱。此外,这也是一个机会
错误。迭代器变量在每个循环中出现三次:即
有两次犯错的机会。 for-each 构造摆脱了
混乱和出错的机会。该示例如下所示
使用 for-each 构造:
void cancelAll(Collection<TimerTask> c) {
for (TimerTask t : c)
t.cancel();
}
将其应用到您的用例中大约会产生以下结果:
List<UserAccounts> scanResults = mapper.scan(UserAccounts.class, scanExpression);
for (UserAccounts userAccounts : scanResults) {
allUserSummary.add(new User(userAccounts.toString()));
}
如果这还不起作用,它也可能暗示实际的错误,只要您的代码假设toString()
班级的UserAccounts
返回uuid,情况可能是也可能不是。通常的方法是有一个getKey()
or getUuidAttribute()
方法和各自的注释@DynamoDBHashKey
or @DynamoDBAttribute
,如示例所示DynamoDBMapper 类 http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodb/datamodeling/DynamoDBMapper.html, e.g.:
@DynamoDBTable(tableName = "UserAccounts")
public class UserAccounts{
private String key; // or uuid right away
@DynamoDBHashKey
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
// ...
}
对于您的示例,这显然会产生以下结果:
List<UserAccounts> scanResults = mapper.scan(UserAccounts.class, scanExpression);
for (UserAccounts userAccounts : scanResults) {
allUserSummary.add(new User(userAccounts.getKey()));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)