2017-07-07 1 views
-1

Meine ursprünglichen Daten wiekonvertieren gesetzt mit der Zählung der Zeichenfolge zur Karte

Strom von String
correctname 
abc,def,ghi,jol 
abc 
def,ghi 
zzzzzzzzzz 
myname 
pppppppppp 
jkl 

Converting es gesetzt:

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

ich einige Stream.map haben (...), die mich zurückkehrt obige Ergebnis

Jetzt möchte ich es sammeln (sammeln oder eine Karte oder eine Gruppe ingby) und die Rück Ergebnis als Karte, so dass meine Antwort

sein sollte

Karte> {korrekt: 2 ungültig: 2 andere: 8}

+2

Ich bin verwirrt. Was bedeutet "Lang"? * Wie * machst du deine Sets auf 'Map '? – shmosel

Antwort

4

Der hier Trick ist, flatMap jeweils auf die Saiten, die drin. Sobald Sie dies getan haben, können Sie map verwenden, um die Werte in die Werte zu konvertieren, die Sie interessieren, und sie zu zählen. Z.B .:

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

klingt wie Sie für diese suchen:

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