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

来源:互联网 发布:华师网络教育平台 编辑:程序博客网 时间:2024/06/11 16:01

前言

作为一个初学者,只学习了很早的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



原创粉丝点击