【问题标题】:How can I check if Currency.getAvailableCurrencies() contain my String value? [closed]如何检查 Currency.getAvailableCurrencies() 是否包含我的字符串值? [关闭]
【发布时间】:2019-07-19 13:31:50
【问题描述】:

我需要检查Currency.getAvailableCurrencies() 是否包含 我的货币是一个字符串

我试过了

if(Currency.getAvailableCurrencies().contains("my currency")){
  // do something
}

但返回false,但它包含"my currency"

【问题讨论】:

  • Currency.getAvailableCurrencies() 返回什么?
  • 货币集中包含的所有货币
  • 你能举个例子吗?
  • 这里是 javadoc:docs.oracle.com/javase/8/docs/api/java/util/…。如您所见,它返回一个 Set。 Set 永远不会包含字符串。它可以包含货币。它可以有一个 Currency,其 currencyCode 或 displayName(它们是字符串)等于另一个字符串。但它不能包含字符串。
  • [SSP、瑞士法郎、VUV、LKR、AWG、UZS、MNT、DOP、MXN、TPE、KHR、PYG、GWP、UAH、AZN、FRF、WST、IQD、美元、BSD、GIP , AZM, MDL, FKP, CDF, TWD, KPW, VEF, EGP, XXX, LRD, NGN, ANG, LVL, RWF, BZD, CNY, AFN, XDR, OMR, YER, ALL, NAD, SGD, KWD, IEP , RSD, KMF, MAD, ZAR, ITL, XBB, PLN, ADP, NLG, BAM, , .....] 这都是返回货币,以及我在其中的价值,但如果没有找到它

标签: java currency


【解决方案1】:

Currency.getAvailableCurrencies() 返回 Set<Currency> doc,因此您尝试在 SetCurrency 对象中检查 String,这些对象总是返回 false。您需要使用输入字符串创建Currency 对象,使用Currency.getInstance 获取Currency 实例

if(Currency.getAvailableCurrencies().contains(Currency.getInstance("my currency")))

【讨论】:

  • 哦,非常感谢,现在一切都找到了
  • @Deadpool 并不是那么毫无意义,因为 Currency.getInstance 只返回可用货币,因此要么失败(有异常),要么如果它返回一个货币,该货币将始终在可用货币集合中
  • 我不这么认为,当他处理这个问题时,他会输入错误的Currency,我想给 OP 机会让他处理异常,如果我们到达那个阶段 @codeflush .dev
  • @Deadpool 是的,我的意思是即使检查 Currency 实例是否在该 Set 中也没有意义?因为您永远不会接触到不在该 Set 中的 Currency 实例。调用 Currency.getInstance 就足够了,如果成功且没有异常,则货币可用
【解决方案2】:

正如@JBNizet 在 cmets 中所说,该方法返回 CurrencySet

您可以使用这个 sn-p 检查您的货币是否可用:

Currency.getAvailableCurrencies().stream()
              .map(Currency::getCurrencyCode)
              .anyMatch(Predicate.isEqual("my currency"));

Currency.getInstance 可能返回的所有内容始终在该 Set 中,因此通过 Currency.getAvailableCurrencies().contains(Currency.getInstance("my currency")) 进行测试基本上没有意义。

运行此 sn-p 时:

    @Test
    public void currency() {
        final Set<Currency> currencies = Currency.getAvailableCurrencies();
        System.out.println(currencies.size());

        for (char c0 = '0'; c0 <= 'Z'; c0 = inc(c0)) {
            for (char c1 = '0'; c1 <= 'Z'; c1 = inc(c1)) {
                for (char c2 = '0'; c2 <= 'Z'; c2 = inc(c2)) {
                    final String currencyCode = new String(new char[]{c0, c1, c2});
                    try {
                        final Currency currency = Currency.getInstance(currencyCode);

                        if (!currencies.contains(currency)) {
                            System.out.println("found currency that is not available: " + currency);
                        }
                    } catch (Exception e) { }
                }
            }
        }

        System.out.println(Currency.getAvailableCurrencies().size());
    }

    private char inc(char c) {
        if (c == '9') {
            return 'A';
        } else {
            return ++c;
        }
    }

你永远不会找到一个不可用的

【讨论】:

    猜你喜欢
    • 2019-03-16
    • 1970-01-01
    • 2021-11-07
    • 2012-05-06
    • 2017-09-23
    • 2012-12-27
    • 2018-07-18
    • 2012-08-11
    • 1970-01-01
    相关资源
    最近更新 更多