2017-05-20 110 views
1

我有一個XML Schema並從JAXB生成相應的POJO類。 最後提供了xml示例。從java創建列表8 stream api

我有一個包含訂單的列表。如果項目的價格超過100,我想收集所有項目。我能夠使用java 7來完成它,但是想到在java 8中使用流做同樣的事情。我嘗試過但不能達到同樣的效果。 有人可以幫我寫代碼嗎?

List<Shiporder> shiporders = new ArrayList<>(); 
      shiporders.add(getShipOrder("src/allinone/order1.xml")); 
      shiporders.add(getShipOrder("src/allinone/order2.xml")); 

<shiporder orderid="Order_1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="shiporder.xsd"> 
    <orderperson>Suman pandey</orderperson> 
    <shipto> 
     <name>Suman pandey</name> 
     <address>BTM layout</address> 
     <city>Bangalore</city> 
     <country>India</country> 
    </shipto> 
<item> 
     <title>Samsung S2</title> 
     <note>Special Edition</note> 
     <quantity>1</quantity> 
     <price>100.90</price> 
    </item> 
<item> 
     <title>Oppo</title> 
     <quantity>4</quantity> 
     <price>20.90</price> 
    </item> 
</shiporder> 

回答

3
如何

這個是lambda代替匿名內部類?

List<Item> items = shiporders.stream() 
          .map(Shiporder::getItems) 
          .flatMap(List::stream) 
          .filter(it -> it.price > 100) 
          .collect(Collectors.toList()); 
+0

由於它的工作.. :) ..我只過濾想,地圖和收集所以它不能正常工作,這個例子中,我才知道關於平面地圖的一個很好的使用.. – user3305063

+1

@ user3305063根本不。我猜你的班級結構,因爲你從來沒有提供過。所以你可能需要爲我的答案做一些轉換。 –

1
shiporders.stream() 
    .filter(new Predicate<Shiporder>(){ 
     public boolean test(Shiporder shiporder) { 
      return <boolean condition on shiporder>; 
     } 
    }).collect(Collectors.asList); 

,或者你可以在形式

shiporders.stream() 
    .filter(shiporder -> <boolean condition on shiporder>) 
    .collect(Collectors.asList); 
+0

謝謝,我會嘗試使用方法.. :) – user3305063