ホームページ  >  記事  >  Java  >  Java 8 でストリームを使用して単語の出現頻度をカウントする方法

Java 8 でストリームを使用して単語の出現頻度をカウントする方法

Barbara Streisand
Barbara Streisandオリジナル
2024-10-31 05:54:30429ブラウズ

How to Count Word Frequencies in Java 8 Using Streams?

ストリームを使用した Java 8 の単語頻度カウント

リスト内の単語の頻度をカウントすることは、テキスト処理における一般的なタスクです。 Java 8 では、これは Collectors.groupingBy() メソッドと Collectors.counting() メソッドを使用して効率的に実現できます。

文字列のリスト内の単語の出現頻度を見つけるには、次の手順を使用できます。

  1. リストで stream() を呼び出してストリームを作成します。
  2. Collectors.groupingBy(Function.identity()) を使用して、ストリーム内の要素を値でグループ化します。
  3. Collectors.counting() を使用して各単語の出現をカウントします。

たとえば、次の単語リストがあるとします。

List<String> wordsList = Lists.newArrayList("hello", "bye", "ciao", "bye", "ciao");

単語の頻度は次のように計算できます。

Map<String,Long> wordFrequencies = wordsList.stream()
    .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

これにより、単語の出現頻度を含むマップが生成されます。ここで、キーは単語、値は出現回数です。指定されたリストの結果は次のようになります。

{ciao=2, hello=1, bye=2}

マップを値で並べ替えるには、LinkedHashMap とentrySet() メソッドを使用してマップ エントリをストリームに収集します。次に、sorted() を使用してエントリを値の降順に並べ替え、Collectors.toMap() を使用してそれらを新しい LinkedHashMap に収集します。

LinkedHashMap<String, Long> countByWordSorted = wordFrequencies.entrySet()
    .stream()
    .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
    .collect(Collectors.toMap(
        Map.Entry::getKey,
        Map.Entry::getValue,
        (v1, v2) -> { throw new IllegalStateException(); },
        LinkedHashMap::new
    ));

これにより、単語が次の順序で並べ替えられたマップが生成されます。その周波数。

以上がJava 8 でストリームを使用して単語の出現頻度をカウントする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。