ホームページ > Java > &#&チュートリアル > Java 8 の Stream API を使用して、リスト内の単語の頻度を効率的にカウントするにはどうすればよいでしょうか?

Java 8 の Stream API を使用して、リスト内の単語の頻度を効率的にカウントするにはどうすればよいでしょうか?

Susan Sarandon
リリース: 2024-11-03 14:51:02
オリジナル
995 人が閲覧しました

How can Java 8's Stream API be used to efficiently count word frequencies in a list?

単語頻度カウントのための Java 8 実装

指定されたリスト内の単語の頻度を識別することは、自然言語処理において不可欠なタスクです。 Java 8 は、堅牢なストリーム API と組み込みコレクターを使用して単語の出現を効率的にカウントする多用途のアプローチを提供します。

問題:

次の単語のリストを考えてみましょう。 :

<code class="java">List<String> wordsList = Lists.newArrayList("hello", "bye", "ciao", "bye", "ciao");</code>
ログイン後にコピー

目的は、各単語の頻度カウントを決定することであり、次のような出力が得られます。

<code class="java">{ciao=2, hello=1, bye=2}</code>
ログイン後にコピー

Java 8 ソリューション:

従来のメソッドとは異なり、Java 8 では別のアプローチが採用されています。

<code class="java">Map<String, Long> collect = wordsList.stream()
    .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));</code>
ログイン後にコピー

このコード行では、stream() メソッドを使用して、wordList からの要素のストリームを開始します。続いて、Collectors.groupingBy() は要素の ID (単語自体) に基づいて要素を収集し、Collectors.counting() は各出現頻度を計算します。

整数の場合、コードを少し変更できます。

<code class="java">Map<String, Integer> collect = wordsList.stream()
     .collect(Collectors.groupingBy(Function.identity(), Collectors.summingInt(e -> 1)));</code>
ログイン後にコピー

値による並べ替え:

さらに、結果のマップは単語頻度の降順で並べ替えることができます:

<code class="java">LinkedHashMap<String, Long> countByWordSorted = collect.entrySet()
            .stream()
            .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
            .collect(Collectors.toMap(
                    Map.Entry::getKey,
                    Map.Entry::getValue,
                    (v1, v2) -> {
                        throw new IllegalStateException();
                    },
                    LinkedHashMap::new
            ));</code>
ログイン後にコピー

この追加のコード スニペットエントリ セットをストリームに追加し、値に基づいて降順に並べ替え、並べ替えられた順序を維持するためにエントリを LinkedHashMap に収集します。

以上がJava 8 の Stream API を使用して、リスト内の単語の頻度を効率的にカウントするにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート