首页 > 解决方案 > 从列表中删除元素,哪种代码风格更好?

问题描述

从列表中删除元素,哪种代码风格更好?1:

List<String> newList = new ArrayList<>();
        for (int i = 0; i < list.size(); i++) {
            if(condition) {
                newList.add(list.get(i));
            }
        }

2:

for (int i = 0; i < list.size();) {
            if(!condition) {
                list.remove(i);
            }else {
                i++;
            }
        }

标签: javalist

解决方案


两者都不是,因为您不应该使用索引for循环来迭代List.

将变量声明为 aList而不是a 的意义ArrayList在于,您可以选择不同的列表实现,例如LinkedList,并且代码将继续正常运行。但是,get(index)对于LinkedList. 相反,使用增强的for循环,或使用Iterator.

如果您想要一个新列表,并且保持现有列表不变,请使用增强for循环:

// Get new list with some elements removed
List<String> newList = new ArrayList<>();
for (String value : list) {
    if (condition) {
        newList.add(value);
    }
}

如果要修改现有列表,请使用Iterator

// Remove elements from existing list
for (Iterator<String> iter = list.iterator(); iter.hasNext(); ) {
    String value = iter.next();
    if (! condition) {
        iter.remove();
    }
}

更新

在 Java 8+ 中,您可以使用流 / lambda 两种方式:

// Get new list with some elements removed
List<String> newList = list.stream()
        .filter(value -> condition)
        .collect(Collectors.toList());
// Remove elements from existing list
list.removeIf(value -> ! condition);

推荐阅读