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
添加回答
舉報