
使用 Java 8 Stream API,将整型列表中十进制表示下任意位置含有数字 '1' 的元素筛选出来,例如 10、15、212、401 和 1 均匹配,而 8、25、98 等不匹配。
使用 java 8 stream api,将整型列表中**十进制表示下任意位置含有数字 '1' 的元素**筛选出来,例如 10、15、212、401 和 1 均匹配,而 8、25、98 等不匹配。
在 Java 8 中,借助 Stream 和函数式编程能力,我们可以简洁高效地完成“查找包含特定数字的整数”这一常见任务。核心思路是:将每个整数转换为字符串,再检查该字符串中是否至少包含一个字符 '1'。
注意:原始问题中给出的 001 是无效的十进制字面量(Java 会将其解释为八进制 1,即十进制 1),因此实际处理时应统一使用标准十进制整数字面量(如 1),避免歧义。
以下是推荐的实现方式(兼容 Java 16+ 的 List.of(),也适用于 Java 8 的 Arrays.asList()):
import java.util.*;
import java.util.stream.Collectors;
public class FilterNumbersWithDigitOne {
public static void main(String[] args) {
List<integer> myList = Arrays.asList(10, 15, 8, 49, 25, 98, 98, 32, 15, 212, 401, 8, 1);
List<integer> result = myList.stream()
.filter(i -> i.toString().contains("1")) // ✅ 更简洁直观的写法
.collect(Collectors.toList());
System.out.println(result); // [10, 15, 15, 212, 401, 1]
}
}</integer></integer>
? 为什么用
contains("1")而不是codePoints().anyMatch(...)?
尽管答案中使用了 Unicode 码点(49)的方式,但对本场景而言,String::contains("1")语义更清晰、可读性更高、性能无显著差异,且完全等价——它底层同样基于字符匹配,且无需关心编码细节。
补充说明与注意事项:
- ✅
toString()默认以十进制格式转换整数,符合题目语义(如10 → "10",001应写作1); - ❌ 避免误用
filter(e -> e == 1):这只会保留值等于1的元素(即恒等判断),而非“含数字 1”; - ⚠️ 若需支持
null元素,请先用.filter(Objects::nonNull)做空值防护; - ? 对于超大列表或性能敏感场景,可考虑预编译正则(如
Pattern.compile("1").matcher(s).find()),但通常contains已足够高效。
最终输出为:[10, 15, 15, 212, 401, 1],精准匹配所有十进制表示中含 '1' 的数字。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











