2017-12-02 1 views
4
String convSummary(String l) { 
    String s = l.toLowerCase(), r =""; 
    for(int i = 0 ; i < s.length() ;i++){ 
     char c = s.charAt(i); 
     if(c == 'a' || c == 'b' || c == 'c' || c == 'd' || c == 'e') 
      r += (char) (c & 0x5f); 
     if(c == 'v' || c == 'w' || c == 'x' || c == 'y' || c == 'z') 
      r += c; 
    } 
    return r; 
} 

vereinfachen Wie kann ich meinen Code mit Strom oder Lambda ich bin vereinfachen Anfänger, ich willWie mein Code mit Strom oder Lambda

für die Unterstützung ... mehr über Lambda und Strom Dank lernen

Antwort

3

Sie könnten String.chars() verwenden, um einen Strom von Zeichen zu bekommen, aber es gibt wichtigere Optimierungen hier zu machen:

  • Sie verketten keine Strings Zeichen für Zeichen. Verwenden Sie eine StringBuilder.
  • Verwenden else if statt zwei if, wenn die Bedingungen sich gegenseitig ausschließen
  • (ein Zeichen c nie einer von „ABCDE“ und „vwxyz“ zugleich sein) Wenn die Zeichen zu lesen sind ein ASCII-Bereich, eine Bedingung für den Bereich verwenden, anstatt die Werte eins nach dem anderen
  • Prüfung

die oben Putting zusammen:

String convSummary2(String s) { 
    StringBuilder sb = new StringBuilder(); 
    s.chars().map(Character::toLowerCase).forEach(c -> { 
     if ('a' <= c && c <= 'e') { 
      sb.append((char)(c & 0x5f)); 
     } else if ('v' <= c && c <= 'z') { 
      sb.append((char) c); 
     } 
    }); 
    return sb.toString(); 
} 
0

Verwenden Sie den folgenden Code ein:

int z=(int)c; 
    if(z>=97 && z<=101) //these are the ascii value of the letters 
    { 
    //code for if c is either a,b,c,d,e 
    System.out.println("a,b,c,d,e"); 
    } 
    else if(z>=118 && z<=122){ 
     //code for if c is either v,w,x,y,z 
     System.out.println("v,w,x,y,z"); 
    } 
+0

Verwenden Sie obigen Code in für Schleife –

+0

Vielen Dank für Hilfe, ich schätze es .. –

+0

Wo ist der Sinn in Ersetzen von "A" mit "97" oder Ersetzen von "E" mit "101"? Sie machen den Code ohne irgendeinen Grund weniger lesbar, was die Notwendigkeit eines Klärungserklärungsschreibens wie '// das sind der ASCII-Wert der Buchstaben' schafft, die auf der Leserseite noch zusätzlichen Aufwand erfordert, um herauszufinden, welchen Buchstaben diese Zahlen entsprechen ... – Holger

2

Wenn Sie sich nicht, Ihren Code dann parallel Janos Antwort ist groß gehen zu laufen, aber wir sollten immer Code streben zu machen, dass durch einfaches Umschalten der parallel leicht parallelisiert werden können Zwischenbetrieb an.

Also, um Ihren Code mit Streams/Lambdas zu konvertieren; Verwenden Sie die if Bedingungen Kriterien innerhalb der filter Zwischenoperation, verwenden Sie map, um die Logik innerhalb der if-Anweisung, dann collect es in eine Zeichenfolge.

return 
     s.toLowerCase() 
     .chars() 
     .filter(i -> 'a' <= i && i <= 'e' || 
        'v' <= i && i <= 'z') 
     .map(i -> 'a' <= i && i <= 'e' ? 
        (char)(i & 0x5f) : 
        (char)i) 
     .mapToObj(i -> Character.toString((char)i)) 
     .collect(Collectors.joining()); 

Und Sie können dies leicht parallelisieren, indem einfach die parallel() Zwischen Operation aufgerufen wird.

Verwandte Themen