为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用lambda拼接字符串?

如何使用lambda拼接字符串?

蛊毒传说 2019-03-13 18:15:10
我现在有一个List<String> 我想使用lambda把这个list中的字符串全部循环拼接到一个字符串上,lambda可以实现么?该怎么做呢?
查看完整描述

4 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

使用foreach对StringBuilder这种有副作用,不大符合函数式编程。可以这样

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


查看完整回答
反对 回复 2019-04-18
?
侃侃无极

TA贡献2051条经验 获得超10个赞

StringBuilder str = new StringBuilder();

list.forEach(item -> {

    str.append(item);

});

补充回答:为什么不能把str改成String类型,通过str = str + item来实现字符串拼接?


上面的代码实际上等价于:


final StringBuilder str = new StringBuilder();

list.forEach(new Consumer<String>() {


    @Override

    public void accept(String item) {

        str.append(item);

    }

});

即Lambda的本质实际上是匿名内部类,所以str必须是final类型(不过代码中的final可以省略),是不可以重新赋值的。


查看完整回答
反对 回复 2019-04-18
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

刚看到邀请邮件,抱歉回复晚了,其实上面叉叉哥已经非常非常专业和准确了,但是既然被邀请,感觉不写两句对不起这个邮件,我就把我的一般写法都列出来,感觉我已经进入到回字有几种写法的迂腐境界了。。。希望不要骂我:


    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(",")));

    }


查看完整回答
反对 回复 2019-04-18
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

我用rxJava来举例子吧,用java8的Streaming也是一样的:


StringBuilder sb = new StringBuilder();

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

如果每个item之间要加入分隔符的话,这次用java8的Streaming哈:


String separator = ",";

StringBuilder sb = new StringBuilder();

Stream.of(list).forEach(item -> sb.append(item).append(separator));

sb.deleteCharAt(sb.length() - sepLen);


查看完整回答
反对 回复 2019-04-18
  • 4 回答
  • 0 关注
  • 1905 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号