2016-06-25 32 views
1

我們試圖使用Talend DI工具來映射數據。在這方面,我們要抓住這是關係到有條件的運營商轉型(由於工具的限制,只要-then-else的語法,而不是它不支持有條件的經營者也不會允許我該如何編寫解碼函數在java中使用條件運算符

樣本數據:。

我想寫這個表達式到了Talend TMAP組成部分。如何利用三元操作這個表達式寫入TMAP組件表達式生成器。另外,我要檢查空值。

case when [TCode]='(00) PRE-PAID' then '00'when[TCode]='(01) C.O.D.' then '01'when[TCode]='(02) EOM' then '02'when[TCode]='10' then '(10) NET 10 DAYS'when[TCode]='15' then '(15) NET 15 DAYS'when[TCode]='21' then '(21) 2 % 30 NET 31'when[TCode]='23' then '(23) 2% NET 30 DAYS'when[TCode]='3' then '(3) CHECK'when[TCode]='30' then '(30) NET 30 DAYS' else [TCode]end as TCode 

嘗試這個條件運算符:

"(00) PRE-PAID".equals(row.tCode) ?"00" : 
"(01) C.O.D".equals(row.tCode) ?"01" : 
"(02) EOM".equals(row.tCode) ? "02" : 
"Unknown" 

上述條件運算符嘗試時,遇到了錯誤:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    XML_API_tXMLMap_1 cannot be resolved to a type 
    XML_API_tXMLMap_1 cannot be resolved to a type 
    Syntax error on token ""(00) PRE-PAID"", delete this token 

提前感謝!

+0

你能發表完整的編譯錯誤嗎? – Kerry

+0

只是一個條件表達式不會編譯,您需要分配或返回結果。 –

+0

@Kerry這裏是更多錯誤的描述:http://paste.ofcode.org/39v84vUZR6r9AwQnUS52M6X – NEO

回答

1

分析

按照link in your comment,您嘗試執行以下操作:

row1.tcode==null?null:row1.tcode.length()==0?null:row1.tcode.toUpperCase() 
"(00) PRE-PAID".equals(row.tCode) ?"00" : 
"(01) C.O.D".equals(row.tCode) ?"01" : 
"(02) EOM".equals(row.tCode) ? "02" : 
"Unknown" 

,並且您收到以下錯誤:

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    XML_API_tXMLMap_1 cannot be resolved to a type 
    XML_API_tXMLMap_1 cannot be resolved to a type 
    Syntax error on token ""(00) PRE-PAID"", delete this token 

注:Java是區分大小寫的語言。所以要麼tcodetCode是正確的,而不是兩個。

說明

您提供的代碼分成兩行顯示和Java不知道如何解釋這一點。

你的代碼第一行(通常是用;結束):

row1.tcode==null?null:row1.tcode.length()==0?null:row1.tcode.toUpperCase() 

和第二行(儘管它有更多的線本身它被看作是「一個線」)的代碼是:

"(00) PRE-PAID".equals(row.tCode) ?"00" : 
"(01) C.O.D".equals(row.tCode) ?"01" : 
"(02) EOM".equals(row.tCode) ? "02" : 
"Unknown" 

我們需要把這兩條指令放在一起。

解決方案

(row1.tCode != null && !row1.tCode.equals("")) ? (
"(00) PRE-PAID".equals(row.tCode.toUpperCase()) ? "00" : 
"(01) C.O.D".equals(row.tCode.toUpperCase()) ? "01" : 
"(02) EOM".equals(row.tCode.toUpperCase()) ? "02" : 
"Unknown") : "Unknown" 

另外,縮短的第一行,你可以爲tCode設置默認值,如果讓任何意義。默認值可能是"",您不必檢查null了。這又取決於你的用例。

+0

謝謝,Syntax爲我工作。 – NEO

相關問題