如何判断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
相关产品推荐
相关产品推荐

