2016-04-20 123 views
1

我在理解流時遇到了一些麻煩。我環顧四周,似乎無法找到符合我的用例的示例。將嵌套循環轉換爲流

我有一個現有的嵌套的for循環:

List<ObjectB> objectBs = new ArrayList<ObjectB>(); 
for (ObjectA objA: objectAList) { 
    for (ObjectB objB: objA.getObjectBList()) { 
     if (objB.getNumber() != 2) { 
      objectBs.add(objB); 
     } 
    } 
} 

exampls的金潤顯示如何添加objB.getNumber()到列表,但不objB

回答

7

您可以使用flatMap獲取所有ObjectB實例的Stream<ObjectB>和過濾所需數量的ObjectB的:

List<ObjectB> objectBs = 
    objectAList.stream() 
       .flatMap (a -> a.getObjectBList().stream()) 
       .filter (b -> b.getNumber() != 2) 
       .collect (Collectors.toList());