如何在Java Stream中使用if判断实现奇偶数字符串转换?
解决方法:在Stream的map操作中加入条件判断
嘿,你原来的代码问题出在用了filter过滤掉了其中一种数字,导致只能处理偶数或者奇数。其实完全不需要过滤,直接在map里对每个数字做奇偶判断,决定前缀就好啦!
最简实现(三元运算符)
用Java的三元运算符可以一行搞定判断,这是最简洁的写法:
import java.util.List; import java.util.stream.Collectors; public class NumberToStringConverter { public static String getString(List<Integer> list){ return list.stream() // 对每个数字判断奇偶,生成带对应前缀的字符串 .map(num -> num % 2 == 0 ? "e" + num : "u" + num) // 用逗号连接所有处理后的元素 .collect(Collectors.joining(",")); } // 测试示例 public static void main(String[] args) { System.out.println(getString(List.of(1,2,4,3))); // 输出:u1,e2,e4,u3 } }
复杂逻辑的扩展写法(if-else块)
如果之后需要更复杂的判断逻辑(比如区分0、正数、负数之类的),可以在Lambda里用完整的if-else块,可读性更强:
.map(num -> { if (num % 2 == 0) { return "e" + num; } else { return "u" + num; } })
为什么原来的代码不行?
你原来的代码里用了filter(i->Integer.parseInt(i)%2==0),这会把所有奇数都过滤掉,所以最终结果里只会有带前缀的偶数(顺便提一句,你示例里要的是"e"前缀,原来代码里写的是"g",我已经帮你修正啦)。我们需要保留所有元素,只是对每个元素做不同的转换,所以直接在map里处理就够了,完全不需要过滤步骤。
内容的提问来源于stack exchange,提问作者Berisol
相关产品推荐
相关产品推荐

