【问题标题】:How do i write Decoding function Using Conditional operator in java我如何在java中使用条件运算符编写解码函数
【发布时间】:2016-10-27 21:58:09
【问题描述】:

我们正在尝试使用 Talend DI 工具映射数据。其中,我们必须捕获与条件运算符相关的转换。(由于工具的限制,它不允许使用 if-then-else 语法,而是支持条件运算符。

样本数据:

我正在尝试将此表达式写入 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

提前致谢!

【问题讨论】:

  • 你能发布完整的编译错误吗?
  • 只是一个条件表达式是编译不了的,需要赋值或者返回结果。
  • @Kerry 这里是错误的更多描述:paste.ofcode.org/39v84vUZR6r9AwQnUS52M6X
  • @JornVernee 您需要分配或返回结果吗?如?
  • 嗯...String result = <conditional expr>return <conditional expr>

标签: java c++ conditional talend tmap


【解决方案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。同样,这取决于您的用例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 2021-02-21
    相关资源
    最近更新 更多