从java 8 stream api创建列表

时间:2017-05-20 10:02:46

标签: java-8 java-stream

我有一个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>

2 个答案:

答案 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);