刷新列表数据,同时在java中迭代它

时间:2016-12-06 13:39:35

标签: java algorithm

我希望在迭代时刷新/更改ArrayList中包含的数据。

这是我写的:

List<Message> msgList = getList();

if (msgList != null && msgList.size() > 0) {
    for (int i = 0; i < msgList.size(); i++) {
        Message message = msgList.get(i);
        String msgType =  getMsgTypeFromId(message.getMessageId());

        if (msgType != null) {
            if (msgType.equals(MessageType.INCOMING.getType())) {
                // Do some operation
                msgList = getNewList(); // How to do this, Is it correct ?
                i = 0;
            }
        }

让我知道这是对的吗?

2 个答案:

答案 0 :(得分:0)

一些代码审核:

List<Message> msgList = getList();
// just in case the getNewList() returns null
// check it here---V
for (int i = 0; null!=msgList && i < msgList.size(); i++) {
    Message message = msgList.get(i);
    String msgType = getMsgTypeFromId(message.getMessageId());

    // no need for cascading two ifs. I'm assuming
    // MessageType.INCOMING is a "constant" thus bound to never return null
    if (MessageType.INCOMING.getType().equals(msgType)) {
        // Do some operation
        msgList = getNewList();
        i = 0;
    }
}

答案 1 :(得分:0)

  

让我知道这是对的吗?

有时(大多数时候)它无效。您从列表的开头开始处理每个更新/删除的项目。在最坏的情况下,你必须查看第一个元素O(N)次,第二个元素O(N-1)次等。

java中的ListIterator支持删除当前元素和替换当前元素,对元素字段的更新也不会触及列表本身及其迭代器。因此,如果您的“某些操作”仅包含当前元素的更新/删除/替换,则可以在不中断循环的情况下执行此操作。

这样您就可以在一次迭代中处理整个列表。

如果您需要对列表进行更广泛的操作(例如添加/删除其他元素),请关注@AdrianColomitchi示例。