我希望在迭代时刷新/更改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;
}
}
让我知道这是对的吗?
答案 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示例。