一、lambda表达式
1、lambda语法:
(parameters) -> expression
或
(parameters) ->{ statements; }
其中paramter可为0个,也可为多个
(1)0个参数
() -> 1+2;
(2)1个参数
(x)-> x+1;
//一个参数可以省掉()写成
x -> x+1;
//或带上类型
(int x) -> x+1;
(3)2个参数
(x,y) -> x+y
//或带上类型
(Int x, int y) -> x+y;
2、变量作用域
ambda 表达式只能引用标记了 final 的外层局部变量,这就是说不能在 lambda 内部 修改定义在域外的局部变量,否则会编译错误
二、Stream
1、Stream流的创建方式
(1)直接创建
Stream<Integer> intStream = Stream.of(1,2,3);
(2)由其它对象间接创建
List<String> strList = Arrays.asList("ABC","B","C");
Stream<String>strStream = strList.stream();
2、Stream流的操作方法
(1)filter过滤
List<String> strlist = Arrays.asList("ABC","B","C");
Stream<String> strStream = strlist.stream();
Stream<String> strStream2 = strStream.filter(str->str.contains("B"));
(2)contact连接
String<String> stream = Stream.concat(Stream.of("1","2"),Stream.of("3","4"))
(3)map方法
//map结合lambda表达式打印list元素的平方数
List<Integer> intList = Arrays.asList(1,2,3);
intList.stream().map(i->i*i).forEach(System.out::println);
(4)flatMap方法:对流中的元素进行lambda表达式运算并将结果替换掉原来的元素
List<String> strlist = Arrays.asList("ABC","B","C");
strlist.stream().flatMap(s->Stream.of(s.replace("B","-B-"))).forEach(System.out::println);
(5)reduce方法
List<Integer> intList = Arrays.asList(1,2,3);
System.out.println(intList.stream().reduce((x,y)->x*y).get());
(6)sort排序
//a、基本数据类型排序
List<Integer> intList = Arrays.asList(2,1,5,3);
intList.stream().sorted().forEach(System.out::println);
//b、特殊类型排序
// (A)类实现Comparable接口
public class PlanPOJO extends BaseEntity implements Comparable<PlanPOJO> {
// (B)重写compareTo方法
@Override
public int compareTo(PlanPOJO o) {
return this.getLength().compareTo(o.getLength());
}
//(C)排序
List<PlanPOJO> plans = findPlanBySettings(pojo,planType,cpName);
plans=plans.stream().sorted().sorted(Comparator.comparing(PlanPOJO::getLength)).collect(Collectors.toList());
(7)distinct去重
List<Integer> intList = Arrays.asList(2,1,5,3,5);
intList.stream().distinct().forEach(System.out::println);
(8)collect方法
List<Person> persons = Arrays.asList(
new Person("zhangSan", 26),
new Person("Lisi", 25),
new Person("Wangwu", 45),
new Person( "Zhaoliu", 62)
);
//按年龄分组
Map<Integer, List<Person>> mPerson = persons.stream().collect(Collectors.groupingBy(Person::getAge));