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

如何判断Currency.getAvailableCurrencies()是否包含指定字符串?调用contains返回false排查

如何检查可用货币集合是否包含指定标识 & 代码返回false的原因

一、正确的检查方法

Currency.getAvailableCurrencies()返回的是**Set<Currency>类型的集合**,里面的元素是Currency对象,不是字符串。所以直接用字符串去调用contains()是行不通的,得通过Currency对象的getCurrencyCode()方法获取标准货币代码后再做比较。这里给你几种常用的实现方式:

1. 遍历集合逐一比对

这是最直观的方式,遍历每个Currency对象,对比其货币代码:

String targetCode = "MY_CURRENCY"; // 替换成你要检查的标准代码
boolean isCurrencyAvailable = false;

for (Currency currency : Currency.getAvailableCurrencies()) {
    if (currency.getCurrencyCode().equals(targetCode)) {
        isCurrencyAvailable = true;
        break;
    }
}

2. 使用Stream API简化代码

Java 8及以上可以用Stream的anyMatch()方法快速判断,代码更简洁:

String targetCode = "MY_CURRENCY";
boolean isCurrencyAvailable = Currency.getAvailableCurrencies().stream()
    .anyMatch(currency -> currency.getCurrencyCode().equals(targetCode));

3. 先转换为货币代码集合再检查

如果你需要多次做这类检查,可以先把所有货币代码提取到一个Set<String>里,后续直接用contains():

// 提前转换一次,后续可复用
Set<String> allCurrencyCodes = Currency.getAvailableCurrencies().stream()
    .map(Currency::getCurrencyCode)
    .collect(Collectors.toSet());

// 检查时直接调用contains
boolean isCurrencyAvailable = allCurrencyCodes.contains("MY_CURRENCY");

二、你的代码返回false的原因

你写的if(Currency.getAvailableCurrencies().contains("my currency"))之所以返回false,核心问题是类型不匹配:

  • contains()方法判断集合中是否存在与传入对象"相等"的元素。这里你传入的是String类型的"my currency",而集合里的元素是Currency对象。
  • Currency和String属于完全不同的类型,它们的equals()方法会直接返回false,不管这个字符串是不是某个货币的代码。

另外还要提醒一点:货币代码是遵循ISO 4217标准的三位大写字母(比如"USD"代表美元,"EUR"代表欧元),如果你输入的"my currency"不是标准格式,即使类型匹配也会找不到。建议确认你要检查的标识是否符合这个标准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:16:05