在Java中以最快的方式基于收集的条件筛选数据
我有一个自定义数组列表,其中包含近600个条目
我需要根据一些条件过滤一些值。我尝试了一些基本的循环方法,但是这个过程非常耗时,我想要的是最快的数据过滤方法
public class MyModel {
private boolean attempeted = false;
private String answer;
public MyModel(String answer) {
this.answer = answer;
}
public void setAttempted(boolean attempeted) {
this.attempeted = attempeted;
}
public String getAnswer() {
return answer;
}
public boolean isAttempeted() {
return attempeted;
}
}
以上是我的模型我想要的是我只需要获得具有尝试值true的数据。这就是我所拥有的:
ArrayList<TestAnswerModel>myMainArrayList=array which contain all my data
ArrayList<TestAnswerModel>filterArrayList=new ArrayList<>();
for(int i=0;i<myMainArrayList.size();i++)
{
if(myMainArrayList.get(i).isAttempeted()) {
filterArrayList.add(myMainArrayList.get(i))
}
}
上面的方法可以很好地工作,但是如果我的数据太大,则需要很多时间。此外,有时数据将为600,尝试的值仅为2或3个值的真值,因此此循环将在没有任何结果的情况下发生
我想要的是任何最快的方法来过滤数据
# 1 楼答案
在Java 8中,可以按如下方式进行筛选:
一个包含600个对象的列表应该在很短的时间内过滤掉,不管你采取什么方法。正如其他人所说,性能问题可能存在于代码的其他地方
# 2 楼答案
您希望收集列表中满足特定条件的所有条目。顺序循环基本上是到达目的地最快的方法。如果您希望5%或95%的列表元素出现在结果列表中,这没有什么区别-您必须查看所有条目来计算结果列表
当然,您可以使用streams和过滤,因为这将允许您并行地使用
parallelStream()
和处理列表的部分但是:600个条目为无。在现代硬件上,600个元素的处理只需眨眼的无数次
因此,真正的答案是:在性能真正成为问题之前,不要担心性能。然后对应用程序进行分析,以确定解决该问题的真正性能瓶颈