如何用Java Stream将整数映射为对应指定字符串?
当然可以用Java Stream实现这个逻辑
给你两种可行的实现方式,直接补全你的代码即可:
方式一:用switch分支映射
Random random = new Random(); int x = random.nextInt(3); // 0 - bad 1 - normal 2 - good String str = IntStream.of(x) .mapToObj(num -> { return switch (num) { case 0 -> "bad"; case 1 -> "normal"; case 2 -> "good"; default -> throw new IllegalArgumentException("无效数字: " + num); }; }) .findFirst() .orElseThrow();
IntStream.of(x)会生成仅包含x的单元素流,mapToObj负责把int值转换成对应的字符串,findFirst取出流中的唯一元素,orElseThrow做兜底异常处理(虽然你的x范围是0-2,理论上不会触发,但加上会让代码更严谨)。
方式二:用数组索引映射(更简洁)
Random random = new Random(); int x = random.nextInt(3); // 0 - bad 1 - normal 2 - good String[] levelMap = {"bad", "normal", "good"}; String str = IntStream.of(x) .mapToObj(num -> levelMap[num]) .findFirst() .orElseThrow();
因为你的数字是连续的0、1、2,刚好对应数组的索引,这种写法更简洁高效,非常适合这种键值连续的映射场景。
额外提一句:如果只是单个int值的转换,其实不用Stream也能轻松实现(直接switch或者数组取值),但既然你要求用Stream,上面两种方式都完全符合需求。
内容的提问来源于stack exchange,提问作者Kto Tam
相关产品推荐
相关产品推荐

