Predicate:Predicate是个函数式接口,和Function接口一样,不同的是Predicate接口的定义为Predicate
使用实例:
Student stu=new Student("A",3);
Predicate
System.out.println(predicate.test(stu));//返回结果为true
Stream:Stream是以一种流式处理的思想对集合的元素进行处理。
使用实例:
List
Student aa=new Student("E",3);
list.add(new Student("A",1));
list.add(new Student("B",2));
list.add(new Student("D",4));
list.add(new Student("C",3));
list.add(aa);
list.add(aa);
1.过滤年龄>1的Student:
List
list1.forEach(stu ->{
System.out.println("stu"+stu.getName()+":"+stu.getAge());
});
2.过滤排序
List
distinct() 无参数,过滤Stream中的重复元素,得到是无重复元素的Stream,重复元素的依据是元素的equals方法
peek(Consumer) peek接收的参数为Consumer类型,Consumer在之前讲到过接收一个T类型参数,无返回值,这是peek方法和map方法的主要区别,peek用来处理无返回值的操作,比如打印元素,而map用来处理有返回值的操作。
sorted() 和上面的带参数的sorted一样,只不过这个无参数,按照对象自定义的Comparator接口实现。如果对象未实现Comparator接口会报错。
skip(long) 跳过Stream中的前n个元素,如果Stream元素个数小于n,返回空的stream
limit(long) 获取Stream中的前n个元素,如果Stream元素个数小于n,返回全部元素
Optional:
Optional.ofNullable(T t) 获取一个内部元素为t的Optional对象,t如果为空,则返回空的Optional对象
ifPresent(Consumer) 判断一个Optional内部的元素是否为空,为空不执行consumer,不为空会执行consumer
orElseGet(Supplier) 尝试从Optional中获取其元素,如果Optional为空,则执行Supplier函数提供一个元素返回,否则返回Optional中的元素
使用实例:
Student aa1=new Student("H",7);
Optional.ofNullable(aa1).orElseGet(() -> {
return null;
});
Optional.ofNullable(aa1).ifPresent(
stp -> { system.out.println("sss");}
);
集合转换:
1.List转set:
Set
2.List转map
Map
我们如果希望当遇到重复的key时判断name的长度,name较长的保留,则可以写成下面的方式:
.collect(Collectors.toMap(stu -> stu.getAge(), stu -> stu,
(stu1, stu2) -> stu1.getName().length() > stu2.getName().length() ? stu1 : stu2));
3.按照年龄分组:
Map
maplist.foreach((k,v) ->{
System.out.println("k:"+k+"v:"+v);
})
4.获取名称列表
List
5.使用lambda表达式简化4
List
6.replaceAll
List
list.replaceAll(temp -> temp.replace("-",""));
7.merge
Map
map.put("ss","ss");
map.merge("ss","hh",String::concat);