2017-05-20 2 views
1

XML 스키마가 있고 JAXB에서 해당하는 POJO 클래스를 생성했습니다. 끝에 xml 샘플이 제공됩니다.자바 8 스트림 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

감사를 시도 매핑하고 그래서 내가 알고있어이 예제와 함께 작동하지 않는를 수집합니다 플랫 맵의 약 하나의 좋은 사용 .. – 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