如何使用lambda拼接字符串?

发布于 2022-09-02 14:48:17 字数 86 浏览 18 评论 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

风吹雪碎 2022-09-09 14:48:18

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

String result = list.stream().collect(Collectors.joining(""));
知你几分 2022-09-09 14:48:18
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可以省略),是不可以重新赋值的。

-小熊_ 2022-09-09 14:48:18

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

    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(",")));
    }
随梦而飞# 2022-09-09 14:48:18

$this->

许你一世情深 2022-09-09 14:48:18

我用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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文