2017-05-20 23 views
1

私はXMLスキーマを持ち、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

どのようにラムダと匿名の内部クラスを置き換えることができますか?私はアプローチを使用してみます

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

それが働いたおかげで.. :) ..私はちょうどフィルターをしようとしていたので、それが働いていなかったをマッピングし、収集し、この例で私が知っているようになりましたフラットマップの約1つの素晴らしい使用.. – 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

関連する問題