使用java8的Stream统计字符串数组中每一个字符出现的次数

x33g5p2x  于2021-12-18 转载在 其他  
字(1.0k)|赞(0)|评价(0)|浏览(331)

题目:有一个字符串数组["Hello world", "I am tom", "how are you!"],要求统计每一个字符出现的次数

实现的方式有很多种,可以考虑HashMap如果key重复则计数加一。比较简单就不写这种方式

如果使用java8的stream来完成这道题,我们可以先将字符串数组转换为字符流,然后进行分组即可完成任务,代码如下:

Stream的方式实现统计

import java.util.ArrayList;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class StreamCounting {
	// 将字符串转换为Stream<Character>,再通过flatMap转换为一个大的Stream<Character>,进行分组
    static Stream<Character> toCharacter(String str) {
        final char[] chars = str.toCharArray();
        final ArrayList<Character> list = new ArrayList<>();
        for (char aChar : chars) {
            list.add(aChar);
        }
        return list.stream();
    }

    public static void main(String[] args) {
    
        Stream.of("Hello world", "I am tom", "how are you!")
                .flatMap(x -> toCharacter(x)).collect(Collectors.groupingBy(Character::charValue, Collectors.counting())).forEach((x, y) -> {
            System.out.println(x + "的个数:" + y);
        });

    }
}
控制台打印的结果
的个数:5
!的个数:1
a的个数:2
d的个数:1
e的个数:2
h的个数:1
H的个数:1
I的个数:1
l的个数:3
m的个数:2
o的个数:5
r的个数:2
t的个数:1
u的个数:1
w的个数:2
y的个数:1

相关文章