我有HashSet
for
这样的结构:
loop
for(T element1 : list1) {
for(T element2 : element1.getSubElements()) {
...
}
}
包含大约10.000个元素,list1
每个迭代也包含大约10-20个元素。
循环大约需要2分钟才能完成。
关于如何改进这个的任何想法?
答案 0 :(得分:3)
循环并不需要那么长时间。你在循环中所做的工作需要时间。
您的选择是;
parallelStream()
查看是否跨多个线程完成工作可以缩短所需的时间。我有一个if,如果条件为真,我将element2添加到ArrayList。也许问题出在if?
要使用parallelStream,您可以执行
List<T> list2 = list1.parallelStream()
.flatMap(e -> e.getSubElements().stream())
.filter(e -> e.isConditionTrue())
.collect(Collectors.toList());
答案 1 :(得分:2)
list1.forEach(new T<E>() {
public void accept(E value) {
System.out.println(value);
}
});
实际上,在Java 8中添加了forEach方法和Consumer接口,但是您已经可以使用像guava或lambdaj这样的库在Java 5+中执行非常类似的操作。但是,Java 8 lambda表达式允许以更简洁,更易读的方式实现相同的结果:
list1.forEach((E value) -> System.out.println(value));