初学java Stream以及Lambda表达式" -> "

前言

作为一个初学者,只学习了很早的java版本,新版本的很多知识都不了解,只能一点一点积累了

正文

最近在晚上发现了一串没见过的java代码:

Collections.sort(names, (String a, String b) -> b.compareTo(a));

很好奇这是一种什么写法,java还有这种 “-> ”符号?

度娘后在知道是Lambda表达式;

现在会粗浅的使用了,下面举个栗子说一下lambda表达式:

有一个集合list

List<String> names = Arrays.asList("Jack", "Jill", "Nate", "Kara", "Kim", "Jullie", "Paul", "Peter");
现在需要遍历其中的元素,一般是用增强for循环
for(String name : names) {
 System.out.println(name);

}

但是使用lambda表达式可以这样写

names.forEach(n -> System.out.println(n));

两者输出情况一样 可以看出lambda简化了代码;

下面举个栗子 说一下stream:

加入现在我需要将每个元素用“,”连起来拼成一个字符串,一般做法是

StringBuffer newstr=new StringBuffer();
for(String name : names) {
 newstr.append(name+",");
}
System.out.println(newstr);

输出:

Jack,Jill,Nate,Kara,Kim,Jullie,Paul,Peter,

还需要去掉最后一个逗号:

newstr.deleteCharAt(newstr.length()-1);
System.out.println(newstr);

输出:

Jack,Jill,Nate,Kara,Kim,Jullie,Paul,Peter

代码量稍多,但是用Stream写,如下:

System.out.println(
names.stream()
.collect(Collectors.joining(", "))

);

这个直接输出:

Jack,Jill,Nate,Kara,Kim,Jullie,Paul,Peter



查询jdk1.8api可知:stream()是Collection接口中的方法,返回以此集合作为源的顺序Stream ;

  collect()是Stream接口中的方法,解释如下:

collect(Collector<? super T,A,R> collector) ,使用 Collector对此流的元素执行 mutable reduction Collector 。

Collectors.joining(", ")返回一个 Collector ,按照遇到的顺序连接由指定的分隔符分隔的输入元素。

如果我还需要筛选出names中长度为4的字符串,并以“,”号拼接,则可以混用lambda表达式这样写

System.out.println(
names.stream()
.filter(ss ->ss.length()==4) //这一步是依次序筛选出条件为长度为4的数据并生成新的Stream

.collect(Collectors.joining(", "))
);
输出:
Jack, Jill, Nate, Kara, Paul



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值