List<String> listA = new Arraylist();
List<String> listB = new Arraylist();
鉴于上述2个列表,我想在每个元素上迭代并调用相同的方法。遍历java中的2个列表
选项1
for(String aStr: listA){
someCommonMethodToCall(aStr);
someCommonMethodToCall(aStr);
...
}
for(String bStr: listB){
someCommonMethodToCall(bStr);
someCommonMethodToCall(bStr);
...
}
或
选项2
List<String> mergedList = new ArrayList();
mergedList.addAll(listA);
mergedList.addAll(listB);
for(String elem: mergedList){
someCommonMethodToCall(elem);
someCommonMethodToCall(elem);
...
}
或
选项3
我觉得选项1应该是最好的。有没有一些Java 8 lambda的方式来做到这一点?另外,性能方面,比方案1更好吗?
这绝对是Java 8的方式。我认为它的表现会比方案1慢。你怎么看? – Ankush
这是可能的。这真的没有关系:说实话,只需选择一个。性能差异不太可能重要,所以请选择最适合您的方式。 –
它的性能会变慢,是的,因为除了concat的开销之外,lambda增加了一个对象创建成本和另一个间接级别(lambda是一个带有.apply()方法的对象,当调用时,调用someCommon和其他一些)。但是实际的性能命中将是微不足道的,除非这是一个经常被称为内部循环。在大多数情况下,你会这样做,因为代码更简单,更清晰。另一种选择是将共享代码分解为一个方法,然后调用该方法。 – tpdi