如何在 java 中使用条件运算符编写解码函数
How do i write Decoding function Using Conditional operator in java
我们正在尝试使用 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
提前致谢!
分析
根据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 是区分大小写的语言。所以 tcode 或 tCode 是正确的,而不是两者都是正确的。
说明
您提供了两行单独的代码,Java 不知道如何解释。
您的第一行代码是(通常以 ;
结尾):
row1.tcode==null?null:row1.tcode.length()==0?null:row1.tcode.toUpperCase()
第二行代码(尽管它本身有更多行,但被视为"one line")是:
"(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
。同样,这取决于您的用例。
我们正在尝试使用 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
提前致谢!
分析
根据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 是区分大小写的语言。所以 tcode 或 tCode 是正确的,而不是两者都是正确的。
说明
您提供了两行单独的代码,Java 不知道如何解释。
您的第一行代码是(通常以 ;
结尾):
row1.tcode==null?null:row1.tcode.length()==0?null:row1.tcode.toUpperCase()
第二行代码(尽管它本身有更多行,但被视为"one line")是:
"(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
。同样,这取决于您的用例。