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

如何用更简洁的Lambda表达式判断忽略大小写的String列表子集关系?

更简洁的Lambda写法判断忽略大小写的子集关系

当然有更简洁的写法!结合Java Stream API和集合操作,我们可以用非常紧凑的Lambda风格代码完成这个需求,而且效率也不错。

先明确你的场景:

  • 列表a:("One", "Two", "Three", "Four", "Five")
  • 列表b:("oNe", "two", "THREE")
  • 核心需求:忽略大小写判断b是否为a的子集

最简洁的一行流操作写法

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

public class SubsetCheck {
    public static void main(String[] args) {
        List<String> a = Arrays.asList("One", "Two", "Three", "Four", "Five");
        List<String> b = Arrays.asList("oNe", "two", "THREE");

        boolean isSubset = b.stream()
                .map(String::toLowerCase) // 统一转小写,用toUpperCase也可以,只要保持一致
                .allMatch(a.stream().map(String::toLowerCase).collect(Collectors.toSet())::contains);

        System.out.println(isSubset); // 输出 true
    }
}

更高效的优化版本

如果需要多次判断子集关系,上面的写法每次都会重新生成a的大小写转换集合,有点浪费性能。可以提前把a的元素转换后存入Set(HashSet的contains操作是O(1),查询效率很高):

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

public class SubsetCheck {
    public static void main(String[] args) {
        List<String> a = Arrays.asList("One", "Two", "Three", "Four", "Five");
        List<String> b = Arrays.asList("oNe", "two", "THREE");

        // 提前生成小写集合,复用性更强
        Set<String> lowerCaseSetA = a.stream()
                .map(String::toLowerCase)
                .collect(Collectors.toSet());

        boolean isSubset = b.stream()
                .map(String::toLowerCase)
                .allMatch(lowerCaseSetA::contains);

        System.out.println(isSubset); // 输出 true
    }
}

逻辑说明

  1. 统一大小写:把列表a的所有元素转成小写(或大写)并存入Set,这一步是为了实现快速的存在性查询
  2. 批量校验:对列表b的每个元素做同样的大小写转换,用allMatch判断所有元素都存在于a的转换集合中——只要有一个元素不存在,就会直接返回false,无需遍历全部元素

这种写法完全基于Lambda和Stream API实现,比循环结合Lambda的写法更紧凑、更符合函数式编程风格,可读性也拉满。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:18:17