【问题标题】:One-liner to count number of occurrences of String in a String[] in Java?在Java中计算String []中String出现次数的单线?
【发布时间】:2025-12-19 00:00:02
【问题描述】:

我有一个 String 数组:

String[] myArray = {"A", "B", "B", "C"};

有没有一种快速的方法来计算该数组中字符串的出现次数?是的,我知道我可以自己迭代和计数:

int count = 0;
String whatToFind = "B";
for (String s : myArray) {
    if (s.equals(whatToFind)) {
        ++count;
    }
}

但我想知道是否有一个实用功能。我在ArraysArrayUtils 中找不到任何内容。单行可以做到这一点吗?

【问题讨论】:

标签: java arrays


【解决方案1】:

你可以使用the frequency method:

List<String> list = Arrays.asList(myArray);
int count = Collections.frequency(list, "B");

或一行:

int count = Collections.frequency(Arrays.asList(myArray), "B");

使用 Java 8,您还可以编写:

long count = Arrays.stream(myArray).filter(s -> "B".equals(s)).count();

或者带有方法参考:

long count = Arrays.stream(myArray).filter("B"::equals).count();

【讨论】:

  • 整洁!不知道那个。 +1
  • @assylias 好答案需要记住这个
  • @RohitJain 我想这是一个品味问题 - 为你添加了单线版本!
【解决方案2】:

您也可以尝试使用Guava,它充满了有用的实用程序。使用以下代码,您可以通过Multiset 计算频率:

public static void main(final String[] args) {
        String[] myArray = {"A", "B", "B", "C"};
        Multiset<String> wordsMultiset = HashMultiset.create();
        wordsMultiset.addAll(new ArrayList<String>(Arrays.asList(myArray)));
        int counts=wordsMultiset.count("B");
        System.out.println(counts);
    }

虽然我知道你正在寻找一个单一的班轮,但番石榴充满了更多的实用程序,这些实用程序是常规 java utils 无法实现的。

【讨论】:

  • 你可以使用:int count = HashMultiset.create(Arrays.asList(myArray)).count("B"); ;-)