我有一个XML模式,并从JAXB生成相应的POJO类。 最后提供了xml样本。
我有一个包含船舶订单的清单。如果项目的价格超过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>
答案 0 :(得分:3)
这个怎么样?
List<Item> items = shiporders.stream()
.map(Shiporder::getItems)
.flatMap(List::stream)
.filter(it -> it.price > 100)
.collect(Collectors.toList());
答案 1 :(得分:1)
shiporders.stream()
.filter(new Predicate<Shiporder>(){
public boolean test(Shiporder shiporder) {
return <boolean condition on shiporder>;
}
}).collect(Collectors.asList);
或者你可以用
形式的lambda替换匿名内部类shiporders.stream()
.filter(shiporder -> <boolean condition on shiporder>)
.collect(Collectors.asList);