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
Lepaskan: 2024-11-03 12:33:02
asal
612 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan