2015-07-13 89 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