使用Java 8 Stream API筛选包含数字1的整数列表元素
问题描述
给定列表定义:
List<Integer> myList = Arrays.asList(10,15,8,49,25,98,98,32,15,212,401,8,001);
期望输出:10,15,15,212,401,001
需求:使用Java 8 Stream API筛选出列表中包含数字1的所有整数。
原回答代码存在逻辑错误:
List<Integer> result = myList.stream().filter(e -> e == 1).collect(Collectors.toList()); System.out.println(result);
这段代码仅筛选值等于1的元素,无法满足“包含数字1”的需求——像10、15这类数字本身不等于1,但内部包含数字1,会被错误过滤。
正确实现方案
要判断整数是否包含数字1,我们可以将整数转换为字符串,然后检查字符串中是否包含字符'1'。具体代码如下:
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<Integer> myList = Arrays.asList(10,15,8,49,25,98,98,32,15,212,401,8,001); List<Integer> result = myList.stream() // 将整数转为字符串,检查是否包含字符'1' .filter(num -> String.valueOf(num).contains("1")) .collect(Collectors.toList()); // 按期望格式输出结果 System.out.println(String.join(",", result.stream().map(String::valueOf).toArray(String[]::new))); } }
代码说明
String.valueOf(num).contains("1"):将每个整数转换为字符串,通过contains方法判断是否包含字符'1',这能准确筛选出所有包含数字1的整数。String.join(",", ...):将结果列表中的元素按逗号分隔拼接成字符串,匹配期望的输出格式。
内容的提问来源于stack exchange,提问作者ganeshan P
相关产品推荐
相关产品推荐

