Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2021
    Messaggi
    2

    Refactor di metodi con gli Streams

    ciao a tutti come posso rifattorizzare questi metodi con gli stream di java? grazie mille
    codice:
    public static String reverse(String str) {
    
      ArrayList<Character> list = new ArrayList<>();
    
      for (int i = 0; i < str.length(); i++) {
        if (Character.isAlphabetic(str.charAt(i))) {
          list.add(str.charAt(i));
        }
      }
      Collections.reverse(list);
    
      Iterator<Character> iterator = list.iterator();
      String result = "";
    
      for (int i = 0; i < str.length(); i++) {
        if (Character.isAlphabetic(str.charAt(i))) {
          result = result + iterator.next();
        }
        if (Character.isDigit(str.charAt(i))) {
          result = result + str.charAt(i);
        }
      }
    
      return result;
    }
    
    //////////////////////////////////////////////////////
    
    
    public static boolean doubleLetters(String word) {
        for (int i = 0; i < word.length()-1; i++){
            if (word.charAt(i) == word.charAt(i+1)){
                return true;
            }
        }  return false;
    }
    
    ////////////////////////////////////////////////////
    
    
    public static String indexShuffle(String str) {
      String odd = "";
      String even = "";
      int count = 0;
      for (char i : str.toCharArray()) {
        if (count % 2 == 0) {
          even += str.charAt(count);
        } else {
          odd += str.charAt(count);
        }
        count++;
      }
      return even + odd;
    }

  2. #2
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,649
    ciao odri, per favore non riportare la decorazione del testo nel codice che posti
    e inseriscilo nel tag [CODE][/CODE],altrimenti diventa illeggibile.

    questa volta ho corretto io

    buon lavoro

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Odri22 Visualizza il messaggio
    ciao a tutti come posso rifattorizzare questi metodi con gli stream di java?
    La Stream API purtroppo non è particolarmente adatta per replicare quello che hai scritto. La Stream API è fatta per operare su collezioni (e in generale su "flussi" di dati) in maniera "funzionale" e dove tipicamente ciascun elemento non ha una correlazione particolare con gli altri o quello precedente/successivo (come invece c'è nelle tue logiche).

    E comunque il problema non è tanto l'uso della Stream API ma il fatto che le tue implementazioni sono altamente inefficienti. Perché in particolare hai usato ampiamente la "concatenazione delle stringhe" ( + ), che è inefficiente in scenari come quelli.

    La mia implementazione di indexShuffle scritta al volo è questa:
    codice:
        public static String indexShuffle(String str) {
            char[] chars = str.toCharArray();
            char[] buf = new char[str.length()];
            int k = 0;
    
            for (int i = 0; i < chars.length; i += 2) {
                buf[k++] = chars[i];
            }
            for (int i = 1; i < chars.length; i += 2) {
                buf[k++] = chars[i];
            }
    
            return new String(buf);
        }

    Funzionalmente, funziona come la tua. Ma con una stringa iniziale di 2000 caratteri, la mia è almeno 20 (sì, 20 !) volte più veloce della tua.
    E con 40 caratteri è comunque almeno 9 volte più veloce della tua.
    Ultima modifica di andbin; 07-12-2021 a 20:17
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.