计数唯一对象的Java lambda表达式

问题描述 投票:2回答:2

我在下面设置该流并不能对.MAP使用的方法计数()。只有在过滤器。但是我还没有设置任何过滤条件。我怎么能做到这一点的字符串低于此流的阵列上?

我想给出的replaceAll正则表达式进行梳理串并获得唯一的字符串,并获得唯一的字符串的总数量。

Stream newStream = Arrays.stream(arr)
                    .map(s -> s.replaceAll("[^a-z]", ""))
                    .distinct()
java lambda java-8
2个回答
3
投票

如果你要算distinct串的数量,你可以不喜欢它:

long countDistinct = Arrays.stream(arr)
        .map(s -> s.replaceAll("[^a-z]", ""))
        .distinct() // intermediate operation with unique strings as 'Stream' return type
        .count();   // terminal operation with count of such strings as return type

1
投票

我不知道我完全理解你的要求。看来要与应用正则表达式的阵列中的每个元素后排序的不同串的List。这List将有两个元素及其次数:

List<String> list = Arrays.stream(arr)
    .map(s -> s.replaceAll("[^a-z]", ""))
    .distinct()
    .sorted()
    .collect(Collectors.toList());

现在,list持有的元素。如果你也想知道有多少元素包含,只需使用List.size方法:

int count = list.size();

编辑:如果您还需要一个Stream与琴弦改变,唯一和分类,只需创建从Streamlist

Stream<String> newStream = list.stream();
© www.soinside.com 2019 - 2024. All rights reserved.