You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Java Stream筛选含指定字符串(大小写兼容)的列表元素

解决筛选含"Aloe"元素及大小写兼容问题

原代码问题说明

你用的anyMatch方法是用来判断流中是否存在符合条件的元素,返回的是布尔值,根本没法赋值给List<String>类型的变量,这就是为什么得不到目标列表的原因。

1. 正确筛选元素的实现方式

要获取所有包含"Aloe"的元素,得用filter方法筛选流中的元素,再通过collect收集成列表:

import java.util.List;
import java.util.stream.Collectors;

public class LotionFilter {
    public static void main(String[] args) {
        List<String> namesOfLotion = List.of("Alexander Almond & Honey Moisturiser", "Max honey and almond moisturiser", "Mikhail Almond and Talc", "Mikhail Natural Almond Moisturizer", "Tigran Aloe Isolani", "Vassily Aloe Attack", "Vassily New aloe Attack");
        
        // 筛选包含"Aloe"(区分大小写)的元素
        List<String> aloeLotion = namesOfLotion.stream()
            .filter(str -> str.contains("Aloe"))
            .collect(Collectors.toList());
        
        System.out.println(aloeLotion);
        // 输出:[Tigran Aloe Isolani, Vassily Aloe Attack]
    }
}

2. 大小写兼容的处理方案

如果要同时匹配"Aloe"和"aloe",有两种常用方法:

方法一:统一转换大小写后判断

把字符串转成小写(或大写),再判断是否包含对应的小写(或大写)关键词,简单直接:

List<String> aloeLotion = namesOfLotion.stream()
    .filter(str -> str.toLowerCase().contains("aloe"))
    .collect(Collectors.toList());
// 输出:[Tigran Aloe Isolani, Vassily Aloe Attack, Vassily New aloe Attack]

方法二:使用正则表达式忽略大小写

适合更复杂的匹配场景(比如部分匹配、特殊字符匹配),预编译正则表达式还能提升性能:

import java.util.regex.Pattern;

// 预编译正则表达式,CASE_INSENSITIVE表示忽略大小写
Pattern aloePattern = Pattern.compile("aloe", Pattern.CASE_INSENSITIVE);

List<String> aloeLotion = namesOfLotion.stream()
    .filter(str -> aloePattern.matcher(str).find())
    .collect(Collectors.toList());
// 输出结果和方法一一致

内容的提问来源于stack exchange,提问作者qatesterbecomingprogrammer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 12:55:20