我不断遇到类似下面代码这样的技术,我需要从列表中过滤出一种枚举类型。

还有其他更有效的方法吗?

    private List<TestResult> removeInfo(List<TestResult> testResults) {
    List<TestResult> tmpT = new ArrayList<TestResult>();
    for(TestResult t : testResults) {
        if(!t.getSeverity().equals(Severity.INFO)) {
            tmpT.add(t);
        }
    }
    return tmpT;
}


收藏是我的第一个想法,但不确定。

干杯
d

最佳答案

您可以使用迭代器就地过滤列表:

Iterator<TestResult> iterator = testResults.iterator();
while(iterator.hasNext()) {
    TestResult result = iterator.next();
    if (!result.getSeverity().equals(Severity.INFO)) {
        iterator.remove();
    }
}

//Now testResults contains all elements that do not have Severity of INFO


这是Marvo发表评论的一个例子。与代码相比,它的内存效率更高,但时间效率更高。再次,如Marvo所说,您可以使用LinkedList进行一些改进。但是,除非您要处理大量数据,否则我认为您不会注意到其中的不同。

10-04 18:22