如何将包含if判断的Java字符队列处理方法改写为三元表达式?
Java if 逻辑转三元运算符实现方案
首先明确原代码核心逻辑等价于:先将字符'1'替换为'i',再过滤出小写字母入队,其余字符直接忽略。
Java中的三元运算符属于表达式,必须有返回值,且两个分支的返回类型需要兼容,无法直接使用无返回值的void方法作为分支内容,可根据你的Queue实现选择对应方案:
方案1:仅用三元做值替换(可读性最高)
无需强行将入队逻辑塞进三元,仅在字符替换场景使用三元,逻辑清晰不易出错:
private static Iterable<Character> transformationA(Queue<Character> q) { Queue<Character> retq = new Queue<>(); for (Character c : q) { // 三元完成'1'到'i'的替换 Character target = c.equals('1') ? 'i' : c; // 仅小写字母入队 if (Character.isLowerCase(target)) { retq.enqueue(target); } } return retq; }
方案2:全逻辑用三元实现
如果你用的是JDK原生Queue,可以使用返回boolean的offer入队方法适配三元要求:
private static Iterable<Character> transformationA(Queue<Character> q) { Queue<Character> retq = new LinkedList<>(); for (Character c : q) { // 无用变量仅用于承接三元返回值,无实际业务意义 boolean unused = c.equals('1') ? retq.offer('i') : (Character.isLowerCase(c) ? retq.offer(c) : false); } return retq; }
如果你的自定义Queue的enqueue是void返回,可调整为如下写法:
private static Iterable<Character> transformationA(Queue<Character> q) { Queue<Character> retq = new Queue<>(); for (Character c : q) { boolean unused = c.equals('1') ? (retq.enqueue('i'), true) : (Character.isLowerCase(c) ? (retq.enqueue(c), true) : false); } return retq; }
注:全逻辑塞三元的写法可读性较差,非特殊场景不推荐使用。
内容的提问来源于stack exchange,提问作者ConstructionCat
相关产品推荐
相关产品推荐

