【问题标题】:Java ArrayList Item Counter ie "Apple, 3×Banana, 2×Orange"“Apple,3×Banana,2×Orange”中的Java ArrayList项目计数
【发布时间】:2012-05-08 12:06:06
【问题描述】:

我确信这不是一个非常复杂的问题,但我对 java 比较陌生,并且对这个问题困惑了一段时间。

假设我有一个包含 6 个字符串值的数组,假设它们是:[Apple, Banana, Banana, Banana, Orange, Orange]。我正在寻找一种方法,该方法将采用该数组并返回一个字符串,在上述情况下,如:"Apple, 3×Banana, 2×Orange"

我将非常感谢您对此的帮助。我一直在尝试不同的技术来实现这一点,但在数组的第一次迭代以及何时检测到重复值等方面都陷入了正确的行为。

【问题讨论】:

    标签: java string arraylist counter


    【解决方案1】:

    使用Map<String, Integer>。遍历数组并将字符串作为 Map 键和计数器作为值:

    Map<String, Integer> words = HashMap<String, Integer>();
    for (String word : words) {
        Integer count = words.get(word);
        count = count == null ? 0 : count++;
        words.put(word, count);
    }
    

    现在单词映射包含单词与其计数之间的映射。

    【讨论】:

      【解决方案2】:

      您可以使用 TreeMap 对象,其中水果名称是键,值是它被看到的次数。

      您使用 foreach 循环逐个水果遍历数组水果,并在 TreeMap 中更新该水果的值。最后,您打印密钥及其值。由于我们使用了 TreeMap,因此键将按排序顺序。

      【讨论】:

        【解决方案3】:

        你试过什么?创建HashMap 的实例,其中键是水果名称,值是水果出现次数。遍历您的数组,在每次迭代时,向您的 Map 添加新水果或增加现有键的出现次数。

        然后遍历 HashMap,构建你的字符串

        【讨论】:

        • 看起来他希望它们按 排序 顺序,所以 HashMap 可能是使用错误的 Map 实现
        • 在这种情况下,他可以使用 TreeMap 实现。无论如何,我不确定 OP 是否想要排序。你是吗?
        • 只要所有数据都存在且正确,顺序并不重要。
        【解决方案4】:

        如果所有内容都在一个 ArrayList 中,并且您知道您所期望的可以使用的水果

        ArrayList<String> fruits = new ArrayList<>();
        //load some fruit code [ .. ]
        int orangeOccurrences = Collections.frequency(fruits, "orange"); 
        

        但地图绝对是更正确的方法。

        【讨论】:

        • 谢谢 Michail,2012 年 5 月你在哪里!? :-)
        • 我可能在一艘名为“Noobness”的船上旅行:P
        猜你喜欢
        • 2020-03-12
        • 2021-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-19
        • 2011-02-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多