gpt4 book ai didi

java - 使用 java8 特性为字符串创建一个字符计数数组

转载 作者:行者123 更新时间:2023-12-01 14:06:29 25 4
gpt4 key购买 nike

我希望使用 Java 8 流 API 为特定字符串(仅包含小写英文字母)创建一个 int[] 计数。其中 arr[i] 表示英语词典中第 i 个字符的计数(例如,arr[0] = String str 中 'a' 的计数,而 arr[2] = String str 中'c' 的计数。这可以很简单完成者:

int[] arr = new int[26];
for(char c : str.toCharArray())
arr[c-'a']++;

或者以第二种方式使用 IntSream:

int[] arr = IntStream.range('a','z'+1).map(i -> (int)str.chars().filter(c -> c == i).count()).toArray();

但是第二种方法的问题是,对于从 'a' 到 'z' 的每个字符,String 被遍历了 26 次

您能否提出使用 java8-stream API 实现相同目标的更好方法?

PS:我知道这可以使用 Map 来完成,但我需要 int[]

最佳答案

int[] r = str.chars()
.boxed()
.reduce(new int[26],
(a, c) -> { ++a[c - 'a']; return a; },
(a1, a2) -> a1);

你知道前者更简单更好。我的回答只是证明使用 Stream API 是可行的,并不建议您使用它。就个人而言,我会选择 map 方法作为最直观的方法。

正如@Holger 所指出的,collect 在这里是一个更好的选择

str.chars()
.map(c -> c - 'a')
.collect(() -> new int[26],
(a, i)-> a[i]++,
(a1, a2) -> /* left as an exercise to the reader*/);

关于java - 使用 java8 特性为字符串创建一个字符计数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61217200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com