在java中迭代2个列表

Ank*_*ush 2 java loops java-8

List<String> listA = new Arraylist();
List<String> listB = new Arraylist();
Run Code Online (Sandbox Code Playgroud)

鉴于以上2个列表,我想迭代并在每个元素上调用相同的方法.

选项1

for(String aStr: listA){
    someCommonMethodToCall(aStr);
    someCommonMethodToCall(aStr);
    ...
}
for(String bStr: listB){
    someCommonMethodToCall(bStr);
    someCommonMethodToCall(bStr);
    ...
}
Run Code Online (Sandbox Code Playgroud)

要么

选项2

List<String> mergedList = new ArrayList();
mergedList.addAll(listA);
mergedList.addAll(listB);

for(String elem: mergedList){
    someCommonMethodToCall(elem);
    someCommonMethodToCall(elem);
    ...
}
Run Code Online (Sandbox Code Playgroud)

要么

选项3

我认为选项1应该是最好的.是否有一些Java 8 lambda方法可以做到这一点?此外,性能方面,还有什么比选项1更好?

shm*_*sel 8

您可以流式传输列表并将流连接成一个:

Stream.concat(listA.stream(), listB.stream())
    .forEach(elem -> {
        someCommonMethodToCall(elem);
        someOtherMethodToCall(elem);
    });
Run Code Online (Sandbox Code Playgroud)

  • 这是可能的.这没关系:老实说,只需选一个.性能差异不太重要,因此请选择最适合您的性能. (5认同)
  • 对于我认为具有少量元素的列表的for循环和流之间的性能考虑因素是浪费时间.如果列表应包含数百万个项目,则应在问题中明确指出,以及性能预期. (2认同)

Cos*_*atu 6

使用 Java 8,您可以使用流:

Stream.concat(listA.stream(), listB.stream())
        .forEach(this::someCommonMethodToCall);
Run Code Online (Sandbox Code Playgroud)