Talend作业含子条件的If语句逻辑错误修正求助
问题分析与修复方案
你的代码逻辑错误出在Fonction_libelle的判断条件上,导致只要Code_direction等于"D45",无论Fonction_libelle是什么值,内部逻辑判断都会返回true,从而始终插入"O"。
错误原因拆解
你原本的条件:
!("CHEF DE SERVICE".equals(input_row.Fonction_libelle) && !"CHEF DE SERVICE ADJOINT".equals(input_row.Fonction_libelle))
根据逻辑运算的德摩根定律,这个表达式等价于:
!"CHEF DE SERVICE".equals(input_row.Fonction_libelle) || "CHEF DE SERVICE ADJOINT".equals(input_row.Fonction_libelle)
也就是说,只要Fonction_libelle不是"CHEF DE SERVICE",或者它是"CHEF DE SERVICE ADJOINT",条件就成立。这几乎覆盖了所有可能的Fonction_libelle取值,所以只要Code_direction是"D45",整个if条件就会成立。
正确的逻辑实现
你的需求是:当Code_direction为"D45",且Fonction_libelle既不是"CHEF DE SERVICE"也不是"CHEF DE SERVICE ADJOINT"时,插入"O"。可以用两种方式实现:
方式1:直接判断两个否定条件
if ("D45".equals(input_row.Code_direction) && !"CHEF DE SERVICE".equals(input_row.Fonction_libelle) && !"CHEF DE SERVICE ADJOINT".equals(input_row.Fonction_libelle)) { output_row.Saisie_manuelle_O_pour_Oui_sinon_rien = "O"; }
方式2:用逻辑或的取反(更简洁)
if ("D45".equals(input_row.Code_direction) && !("CHEF DE SERVICE".equals(input_row.Fonction_libelle) || "CHEF DE SERVICE ADJOINT".equals(input_row.Fonction_libelle))) { output_row.Saisie_manuelle_O_pour_Oui_sinon_rien = "O"; }
这两种写法都能准确匹配你的需求:只有当Code_direction是"D45",同时Fonction_libelle不属于两个排除值时,才会设置目标列为"O"。
内容的提问来源于stack exchange,提问作者Onyx
相关产品推荐
相关产品推荐

