簡體   English   中英

實現使用Java計算一個字符串數組中每個字符串存在次數的算法的最快方法

[英]the quickest way to Implement an algorithm to count how many times each string is present in an array of strings using Java

只是想知道實現一種算法以使用Java計算字符串數組中每個字符串存在多少次的最快方法是什么?

這是我嘗試過的方法,並且有效,但是我擔心它可能會“作弊”,因為它偏離了這個問題:

{
    String[] stringArray = {"Random", "Words", "Here","Random", "Words", "Here","Random", "Words", "Here","Random", "Words", "Here"};

    List asList = Arrays.asList(stringArray);
    Set<String> mySet = new HashSet<>(asList);

    mySet.stream().forEach((s) -> {
        System.out.println(s + " " +Collections.frequency(asList,s));
    });
}

最簡單的方法是使用Map#merge()

Map<String, Integer> m = new HashMap<>();
for (String s : array)
    m.merge(s, 1, Integer::sum);

之后, m將把字符串作為鍵,將出現的值作為值:

m.forEach((k, v) -> System.out.format("%s occured %s time(s)\n", k, v));

通過在流中使用收集器:

Arrays.stream(list).collect(Collectors.groupingBy(e -> e, Collectors.counting()))

因此,如果您有這樣的事情:

        String[] list = new String[4];
        list[0] = "something";
        list[1] = "gfddfgdfg";
        list[2] = "something";
        list[3] = "somet444hing";
        System.out.println(Arrays.stream(list).collect(Collectors.groupingBy(e -> e, Collectors.counting())));

輸出將是:

{gfddfgdfg=1, something=2, somet444hing=1}

我將使用groupingBy返回計數圖。

Map<String, Long> counts = Stream.of(array)
                           .collect(Collectors.groupingBy(w -> w, Collectors.counting()));

也可以打印這些

Stream.of(array)
      .collect(Collectors.groupingBy(w -> w, Collectors.counting()))
      .forEach((k, v) -> System.out.println(k + " occurred " + v " times));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM