2015-07-13 91 views
3

嵌套循环我有一段代码涉及条件的Java 8

List<Obj1> result = new ArrayList<Obj1>(); 
for (Obj1 one : list1) { 
      for (Obj2 two : list2) { 
       if (one.getStatus() == two) { 
        result.add(one); 
       } 
      } 
     } 

在Java 8使用流,我可以这样

list1.stream().forEach(one -> { 
     if (list2.stream().anyMatch(two -> one.getStatus() == two)) { 
      result.add(one); 
     }    
    }); 

写能这样大大简化。

+4

这两个代码片段并不相同。第二个就像在第一个“添加”之后有一个“break”。 – Holger

+1

为什么使用流如果你的旧代码只是工作?流就像任何新的,闪亮的功能f:为了使用f而使用f不是使用f的方式;做这个,你是f。 – fge

+0

@fge - 因为流可以免费进行并行处理。 – OldCurmudgeon

回答

7

假设list2包含唯一值,你可以使用equals,而不是==Obj2,你可以写这样的:

List<Obj1> result = list1.stream() 
         .filter(one -> list2.contains(one.getStatus())) 
         .collect(Collectors.toList()); 

虽然这将是更好的性能,把list2元素的Set