Java 将iso 4217数字货币代码转换为货币名称

Java 将iso 4217数字货币代码转换为货币名称,java,iso,applepay,Java,Iso,Applepay,我有一个ISO 4217数字货币代码:840 我想获取货币名称:USD 我正在尝试这样做: Currency curr1 = Currency.getInstance("840"); 但我一直在 java.lang.IllegalArgumentException 如何修复?有什么想法吗?java.util.Currency.getInstance只支持ISO 4217货币代码,不支持货币编号。但是,您可以使用getAvailableCurrences方法检索所有货币,然后通过比较getNu

我有一个ISO 4217数字货币代码:
840

我想获取货币名称:
USD

我正在尝试这样做:

 Currency curr1 = Currency.getInstance("840");
但我一直在

java.lang.IllegalArgumentException


如何修复?有什么想法吗?

java.util.Currency.getInstance
只支持ISO 4217货币代码,不支持货币编号。但是,您可以使用
getAvailableCurrences
方法检索所有货币,然后通过比较
getNumericCode
方法的结果来搜索代码为840的货币

像这样:

public static Currency getCurrencyInstance(int numericCode) {
    Set<Currency> currencies = Currency.getAvailableCurrencies();
    for (Currency currency : currencies) {
        if (currency.getNumericCode() == numericCode) {
            return currency;
        }
    }
    throw new IllegalArgumentException("Currency with numeric code "  + numericCode + " not found");
}
public静态货币getCurrencyInstance(int numericCode){
设置货币=货币。GetAvailableCurrences();
用于(货币:货币){
if(currency.getNumericCode()==numericCode){
返回货币;
}
}
抛出新的IllegalArgumentException(“带数字代码的货币”+数字代码+“未找到”);
}

您必须提供类似“USD”的代码,然后它将返回Currency对象。如果您使用的是JDK 7,那么可以使用以下代码。JDk 7有一个方法getAvailableUrrences()

更好的方法是:

public class CurrencyHelper {

    private static Map<Integer, Currency> currencies = new HashMap<>();

    static {
        Set<Currency> set = Currency.getAvailableCurrencies();
        for (Currency currency : set) {
             currencies.put(currency.getNumericCode(), currency);
        }
    }

    public static Currency getInstance(Integer code) {
        return currencies.get(code);
    }
}
公共类CurrencyHelper{
私有静态映射货币=新HashMap();
静止的{
Set=Currency.getAvailableCurrences();
用于(币种:设置){
currency.put(currency.getNumericCode(),currency);
}
}
公共静态货币getInstance(整数代码){
返回货币。获取(代码);
}
}
只需做一点工作,缓存就可以变得更高效。有关更多信息,请查看Currency类的源代码。

使用Java 8:

Optional currency=currency.getAvailablecurrences().stream().filter(c->c.getNumericCode()==840.findAny();

您必须提供一个
区域设置
。我还可以提供一个字符串:getInstance(string currencyCode)返回给定货币代码的货币实例。我可以从数字代码中获取区域设置吗?如果您只想将代码映射到货币单位,为什么不使用映射?
public class CurrencyHelper {

    private static Map<Integer, Currency> currencies = new HashMap<>();

    static {
        Set<Currency> set = Currency.getAvailableCurrencies();
        for (Currency currency : set) {
             currencies.put(currency.getNumericCode(), currency);
        }
    }

    public static Currency getInstance(Integer code) {
        return currencies.get(code);
    }
}