Java 如何将DynamoDB扫描结果添加到对象列表?

Java 如何将DynamoDB扫描结果添加到对象列表?,java,iterator,amazon-dynamodb,Java,Iterator,Amazon Dynamodb,我正在对DynamoDB表执行扫描,然后需要将返回项中的各个属性添加到类型为User的列表中(User具有单个构造函数User(String uuid))。代码当前成功扫描数据库并返回扫描结果的列表。然而,由于某种原因,我的迭代似乎返回null AmazonDynamoDBClient client = dynamoClient.getDynamoClient(); DynamoDBMapper mapper = new DynamoDBMapper(client);

我正在对DynamoDB表执行扫描,然后需要将返回项中的各个属性添加到类型为
User
的列表中(
User
具有单个构造函数
User(String uuid)
)。代码当前成功扫描数据库并返回扫描结果的
列表。然而,由于某种原因,我的迭代似乎返回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
    }
AmazonDynamoDBClient=dynamoClient.getDynamoClient();
DynamoDBMapper mapper=新的DynamoDBMapper(客户机);
试一试{
DynamoDBScanExpression scanExpression=新的DynamoDBScanExpression();
Map scanFilter=new HashMap();
条件扫描条件=
新条件()。带有ComparisonOperator(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)it.next();
添加新用户(scanResults.get(1.toString());
}
}捕获(例外e){
//待办事项
}

我建议您通过以下方式开始使用现代紧凑列表迭代,这有助于避免在使用旧迭代样式时出现许多常见错误:

[……]

迭代器只是杂乱无章。此外,这是一个发展的机会 错误。迭代器变量在每个循环中出现三次:即 两次出错的机会。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.getKey()));
    }
List scanResults=mapper.scan(UserAccounts.class,scanExpression);
用于(用户帐户用户帐户:扫描结果){
添加(新用户(userAccounts.getKey());
}

将打印输出放在for循环的一侧,查看它是否打印您的用户。。。同时,也要确保它是在事后完成的,而不是在你们的getter中完成的allUserSummary@Daniel我可以确认问题来自这一行:
allUserSummary.add(新用户(scanResults.get(1.toString()))如果我在迭代器中放入一个print语句,我会得到正确的返回用户数,但显然用户是空的!
@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()));
    }