2017-07-07 31 views
-1
映射字符串的

我的原始數據是像轉換設置爲與計數

correctname 
abc,def,ghi,jol 
abc 
def,ghi 
zzzzzzzzzz 
myname 
pppppppppp 
jkl 

轉換它設置字符串流:

{correct} 
{abc, def,ghi,jkl} 
{abc} 
{def,ghi} 
{invalid} 
{correct} 
{invalid} 
{jkl} 

我有一些Stream.map(...),這是我回國上述結果

現在我要收集它(收集或繪製或組ingby),並返回結果作爲地圖這樣,我的答案應該是

地圖> {正確的:2 無效:2個 別人:8}

+2

我很困惑。 「Long」代表什麼? *你如何*將你的集合映射到'Map '? – shmosel

回答

4

這裏的竅門是flatMap每一套的,屬於串在裏面。完成之後,您可以使用map將值轉換爲您感興趣的值並對其進行計數。例如: -

Set<String> allowed = new HashSet<>(Arrays.asList("correct", "invalid")); 
Map<String, Long> result = 
    values.flatMap(Set::stream) 
      .map(s -> allowed.contains(s) ? s : "other") 
      .collect(Collectors.groupingBy(Function.identity(), 
             Collectors.counting())); 
2

聽起來你正在尋找這樣的:

Map<String, Long> answer = sets.stream() 
     .flatMap(Set::stream) 
     .collect(Collectors.groupingBy(
       s -> s.matches("invalid|correct") ? s : "others", 
       Collectors.counting()));