2016-06-08 5 views
1

자바 코드를 작성하여 페이지별로 XML 덤프 페이지를 읽고 싶습니다. 이 스칼라 코드가 있는데, 다시 쓰려고 이해하지 못합니다. 그래서 무엇입니까? 비슷한 Java 코드. 나는 그것이 JVM에서 제대로 실행될 수 있지만, 나는 내가 이해할 수있는 것을 원한다.스칼라 코드를 자바로 변환하여 XML 파일을 읽는 방법

import edu.umd.cloud9.collection.wikipedia.language._ 
import edu.umd.cloud9.collection.wikipedia._ 
def wikiXmlToPlainText(xml: String): Option[(String, String)] = { 
val page = new EnglishWikipediaPage() 
    WikipediaPage.readPage(page, xml) 
    if (page.isEmpty) None 
     else Some((page.getTitle, page.getContent)) 
     } 
      val plainText = rawXmls.flatMap(wikiXmlToPlainText) 

답변

1

"rawXmls"의 유형을 추측 할 수있는 일종의 문자열이라고 말할 수 없습니다. 다음은 튜플 대신 문자열 목록의 java 옵션을 반환하는 wikiXmlToPlainTextUtil 메서드의 변환입니다 (다소 차이가 있음). 이것을 스트림에 적용 해 보겠습니다. this answer이 도움이 될 것입니다. 실제로 그 채우기, 제목 및 본문 특성을 가진 자바 빈을 만들기보다는`목록 을`사용하는 것이 좋습니다 것

import edu.umd.cloud9.collection.wikipedia.language.* 
import edu.umd.cloud9.collection.wikipedia.* 

class wikiXmlToPlainTextUtil { 
    Optional<List<String>> wikiXmlToPlainText(String xml) { 
    EnglishWikipediaPage page = new EnglishWikipediaPage() 
    WikipediaPage.readPage(page, xml) 
    if (page.isEmpty) { 
     return Optional.empty(); 
    } else { 
     List<String> result = new ArrayList<>(); 
     result.add(page.getTitle); 
     result.add(page.getContent); 
     return Optional.of(result); 
    } 
    }  
} 
+0

은 다시 독자들에게 숙제로 남긴다. –

+0

사실 List (1,2,3) .flatMap (a => Some (a) .filter (_ % 2 == 0))'은 컴파일하여'List (2)'를 반환합니다. 'rawXmls' 또는'plainText'에 대한 타입의 원래 코드에는 전혀 표시가 없습니다. 'wikiXmlToPlainText'에 대한 매개 변수는 리턴 타입이 엄격하게 모나드는 아니지만 표준 콜렉션 중 하나 일 것이라고 알려주는 'Something [String]'이라고 알려줍니다. RDD from spark는 또한 예를 들어 flatMap에 전달 된 함수로'A => Traversable [B]'를 허용합니다. –

+0

감사합니다. 네, JavaRDD 또는 JavaRDD >로 페이지 제목으로 string1을 사용하고 페이지 본문으로 String2로 사용해야합니다. – user283686