使用Streams移除指定元素:两个Java方法的功能异常排查
修复两个Java Stream方法的问题
一、修复printFolgenOhne3方法
原代码问题
- 仅将传入的
anz单个元素加入列表,未生成从4开始的连续数字序列 - 过滤逻辑完全错误:用
anz % 3 == 0判断(而非当前元素i % 3 == 0),且逻辑颠倒——我们需要保留非3的倍数,而非过滤掉非倍数
修正后的代码
static void printFolgenOhne3(int anz) { // 生成从4到anz的连续整数流,过滤掉3的倍数后输出 IntStream.rangeClosed(4, anz) .filter(i -> i % 3 != 0) .forEach(System.out::println); }
补充:生成无限序列(按需停止)
如果需要生成从4开始的无限序列(而非到anz截止),可以用以下实现:
static void printFolgenOhne3() { IntStream.iterate(4, i -> i + 1) .filter(i -> i % 3 != 0) .forEach(System.out::println); }
二、修复deleteBlanks方法
原代码问题
- 将整个字符串放入列表后,
filter(x -> !x.isBlank())仅过滤空字符串,完全未处理字符串内部的空格 - 最终输出列表对象,而非处理后的目标字符串
修正后的代码
方法1:字符串直接替换(最简洁)
static void deleteBlanks(String s1) { // 替换所有空白字符(含空格、制表符等),仅替换空格用replace(" ", "") String result = s1.replaceAll("\\s", ""); System.out.println(result); }
方法2:用Stream处理字符(符合Stream使用需求)
static void deleteBlanks(String s1) { String result = s1.chars() .filter(c -> !Character.isWhitespace(c)) // 过滤空格字符 .mapToObj(c -> String.valueOf((char) c)) .collect(Collectors.joining()); System.out.println(result); }
内容的提问来源于stack exchange,提问作者haruka kudo
相关产品推荐
相关产品推荐

