recherche

Maison  >  Questions et réponses  >  le corps du texte

java - 如何使用lambda拼接字符串?

我现在有一个List<String> 我想使用lambda把这个list中的字符串全部循环拼接到一个字符串上,lambda可以实现么?该怎么做呢?

PHP中文网PHP中文网2812 Il y a quelques jours515

répondre à tous(5)je répondrai

  • 伊谢尔伦

    伊谢尔伦2017-04-17 17:51:11

    L'utilisation de foreach a des effets secondaires sur StringBuilder, ce qui n'est pas conforme à la programmation fonctionnelle. Tu peux faire ça

    String result = list.stream().collect(Collectors.joining(""));

    répondre
    0
  • PHP中文网

    PHP中文网2017-04-17 17:51:11

    StringBuilder str = new StringBuilder();
    list.forEach(item -> {
        str.append(item);
    });

    Réponse supplémentaire : pourquoi str ne peut-il pas être modifié en type String et pourquoi l'épissage des chaînes ne peut-il pas être réalisé via str = str item ?

    Le code ci-dessus est en fait équivalent à :

    final StringBuilder str = new StringBuilder();
    list.forEach(new Consumer<String>() {
    
        @Override
        public void accept(String item) {
            str.append(item);
        }
    });

    Autrement dit, l'essence de Lambda est en fait une classe interne anonyme, donc str doit être de type final (mais final dans le code peut être omis) et ne peut pas être réaffecté.

    répondre
    0
  • 巴扎黑

    巴扎黑2017-04-17 17:51:11

    Je viens de voir l'e-mail d'invitation, et je suis désolé pour la réponse tardive. En fait, frère Chacha ci-dessus était très, très professionnel et précis, mais depuis que j'ai été invité, je me suis senti désolé de ne pas avoir écrit deux phrases dans ce message. email, je vais donc lister mes méthodes générales d'écriture. Quand je suis sorti, j'ai senti que j'étais entré dans l'état pédant où il y a plusieurs façons d'écrire le mot « hui ». . . J'espère que tu ne me gronderas pas :

        public static void join1(){
            List<String> list = Arrays.asList("11","22","23");
            
            //最传统写法:
            StringBuilder sb = new StringBuilder();
            for(String s : list){
                sb.append(s);
            }
    
            System.out.println(sb.toString());
    
            //如果想要加个分隔符,比如逗号,传统写法:
            sb = new StringBuilder();
            for(int i = 0; i < list.size(); i++){
                sb.append(list.get(i));
    
                if(i < list.size() - 1){
                    sb.append(",");
                }
            }
            System.out.println(sb.toString());
    
            //使用commons-lang库写法, 其实这个已经够简单了,就这个功能而言,我很喜欢,而且最最常用:
            System.out.println(StringUtils.join(list.toArray(), ","));
    
            //进入jdk8时代:
            System.out.println(list.stream().collect(Collectors.joining()));
            //jdk8时代,加个分隔符:
            System.out.println(list.stream().collect(Collectors.joining(",")));
        }

    répondre
    0
  • 高洛峰

    高洛峰2017-04-17 17:51:11

    $this->

    répondre
    0
  • 迷茫

    迷茫2017-04-17 17:51:11

    Je vais utiliser rxJava comme exemple. La même chose est vraie avec le Streaming de java8 :

    StringBuilder sb = new StringBuilder();
    rx.Observable.from(list).subscribe(sb::append);

    Si vous souhaitez ajouter un séparateur entre chaque élément, utilisez cette fois le Streaming de java8 :

    String separator = ",";
    StringBuilder sb = new StringBuilder();
    Stream.of(list).forEach(item -> sb.append(item).append(separator));
    sb.deleteCharAt(sb.length() - sepLen);

    répondre
    0
  • Annulerrépondre