【发布时间】:2020-07-27 17:48:48
【问题描述】:
我希望使用 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[]
【问题讨论】:
-
您的迭代方法要好得多。不要使用流。保留你所拥有的。
标签: java string collections java-stream