2017-05-20 69 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