Rumah >Java >javaTutorial >Bagaimanakah saya boleh mengira frekuensi perkataan dengan cekap dalam Java 8 menggunakan aliran?

Bagaimanakah saya boleh mengira frekuensi perkataan dengan cekap dalam Java 8 menggunakan aliran?

DDD
DDDasal
2024-11-03 12:33:02620semak imbas

How can I efficiently count word frequencies in Java 8 using streams?

Pengiraan Frekuensi Perkataan dalam Java 8: Pendekatan Diperkemas

Dalam Java 8, mengira kekerapan perkataan dalam senarai boleh dicapai dengan elegan menggunakan strim.

Pertimbangkan senarai contoh berikut: Senarai wordsList = Lists.newArrayList("hello", "bye", "ciao", "bye", "ciao");. Untuk mengira kekerapan perkataan, kami menggunakan Collectors.groupingBy dan Collectors.counting collectors.

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

Kod ini mula-mula mengumpulkan elemen senarai mengikut identiti rentetannya, dengan berkesan mencipta peta di mana kunci ialah perkataan dan nilai unik kiraan mereka. Pengumpul Collectors.counting secara automatik menambah kiraan untuk setiap perkataan.

Peta yang terhasil, wordFrequencies, akan menyerupai {ciao=2, hello=1, bye=2} apabila dicetak.

Sebagai alternatif , untuk kiraan bernilai integer:

<code class="java">Map<String, Integer> wordFrequencies = wordsList.stream()
     .collect(Collectors.groupingBy(Function.identity(), Collectors.summingInt(e -> 1)));</code>

Varian ini menggunakan Collectors.summingInt untuk mengumpul kiraan integer.

Untuk mengisih peta yang terhasil mengikut nilai, kami boleh merantai aliran dan pengumpul tambahan:

<code class="java">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
            ));</code>

Isih ini memastikan bahawa perkataan yang paling kerap muncul muncul dahulu dalam peta.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mengira frekuensi perkataan dengan cekap dalam Java 8 menggunakan aliran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn