前言
作为一个初学者,只学习了很早的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表达式这样写:
names.stream()
.filter(ss ->ss.length()==4) //这一步是依次序筛选出条件为长度为4的数据并生成新的Stream
.collect(Collectors.joining(", "))
);