首页 > 解决方案 > Java Streams:获取列表中一组字符的总和

问题描述

我有这个数据结构和一些示例内容:

List<Set<Character>> aList = List.of(Set.of('a', 'b', 'c'), Set.of('a', 'b', 'c'), Set.of('a', 'b', 'c'), Set.of('a'), Set.of('b'));

我想检索所有字符的总和。在这个例子中,它将是

3 + 3 + 3 + 1 + 1 = 11

我可以这样解决:

int sum = 0;
for (Set<Character> aSet : aList) {
   sum += aSet.size();
}

但是,我几乎可以肯定有一种更聪明的方法可以用流来做到这一点。我就是想不通。有人有想法吗?

标签: javajava-stream

解决方案


您应该将集合映射到它们的大小,然后您可以应用sum()

aList.stream().mapToInt(p -> p.size()).sum();

或者按照 khelwood 的建议:

aList.stream().mapToInt(Set::size).sum();

推荐阅读