我不断遇到类似下面代码这样的技术,我需要从列表中过滤出一种枚举类型。
还有其他更有效的方法吗?
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进行一些改进。但是,除非您要处理大量数据,否则我认为您不会注意到其中的不同。