3 回答

TA贡献1851条经验 获得超4个赞
如果要计算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

TA贡献1783条经验 获得超4个赞
我不确定我是否完全理解您的要求。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
更改字符串、唯一和排序的字符串,只需创建一个新Stream
的 from list
:
Stream<String> newStream = list.stream();

TA贡献1876条经验 获得超7个赞
以列表形式收集和获取总数都是终端操作,因此您只能在实时流中执行任一操作。
如果您必须使用相同的流来获取字符串列表和计数,一个(hacky)选项是使用Supplier<Stream<T>>:
String text = "FOO bar BAZ TEXT text some";
String[] arr = text.split(" ");
Supplier<Stream<String>> sameStream = () -> Arrays.stream(arr)
.map(s -> s.replaceAll("[^a-z]", ""))
.distinct()
.filter(s -> !s.isEmpty())
.sorted();
System.out.println("Unique strings are: " + sameStream.get().collect(Collectors.toList()));
System.out.println("Count of Unique strings are: " + sameStream.get().count());
上面产生了这个输出:
Unique strings are: [bar, some, text]
Count of Unique strings are: 3
添加回答
举报