关于Stream()和Collectors.joining()字符串连接器

工作时发现一个很棒的拼接字符串的方法:

final String[] strs= {"x", "y", "z"};
Stream<String> stream = Stream.of(strs);

// 拼接成 [x, y, z] 形式
String result1 = stream.collect(Collectors.joining(", ", "[", "]"));
// 拼接成 x | y | z 形式
String result2 = stream.collect(Collectors.joining(" | ", "", ""));
// 拼接成 x -> y -> z] 形式
String result3 = stream.collect(Collectors.joining(" -> ", "", ""));

可以代替使用冗长的for循环或者forEach循环,更加有feel~

举个栗子:

 deptDepthStr = deptNameList.stream().collect(Collectors.joining("/"));

将List中的deptName使用“/”连接符连接起来,下面则是用最原始的for循环写的 ,一句顶三行,有文化还是很棒啊~~

for (int i = 0; i < deptNameList.size() - 1; i++) {
       description += deptNameList.get(i).getDeptName() + "/";
       }
 description =description + deptNameList.get(deptNameList.size() - 1).getDeptName();

 又是元气满满的一天           啾咪~

 

 

 

========================================分割线===================================================

以下为查询资料后的扩展:

List<String> widgetIds = widgets.stream().map(Widget::getWidgetId).collect(Collectors.toList());

解释下一这行代码:

  • widgets:一个实体类的集合,类型为List<Widget>
  • Widget:实体类
  • getWidgetId:实体类中的get方法,为获取Widget的id

本来想要获得wiget的id集合,按照我的思路肯定是遍历widges,依次取得widgetIds,但是此行代码更加简洁,高效

stream()优点

  • 无存储。stream不是一种数据结构,它只是某种数据源的一个视图,数据源可以是一个数组,Java容器或I/O channel等。
  • 为函数式编程而生。对stream的任何修改都不会修改背后的数据源,比如对stream执行过滤操作并不会删除被过滤的元素,而是会产生一个不包含被过滤元素的新stream。
  • 惰式执行。stream上的操作并不会立即执行,只有等到用户真正需要结果的时候才会执行。
  • 可消费性。stream只能被“消费”一次,一旦遍历过就会失效,就像容器的迭代器那样,想要再次遍历必须重新生成。

具体可参考原文博客:https://blog.csdn.net/lidai352710967/article/details/81461119

向大神致敬~~

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值