java.util.function 定义了大量的函数接口
常用接口
| 函数式接口 | 参数类型 | 返回类型 | 用途 |
|---|---|---|---|
| Consumer 消费型接口 | T | void | 对类型T对象应用操作,包含方法 void accept(T t) |
| Supplier 供给型接口 | 无 | T | 返回类型为T的对象,包含方法 T get() |
| Function 函数型接口 | T | R | 对类型为T的对象应用操作,并返回结果。结果是R类型的对象。包含方法:R apply(T t) |
| Predicate 断定型接口 | T | boolean | 确定类型为T的对象是否满足某约束,并返回boolean值。包含方法;boolean test(T t) |
java.util.stream
简单上手limit 截取
skip 跳过
distinct 去重复
int[] ints = {1, 2, 3, 3, 3, 3, 6, 8, 9, 0, 4};
//创建一个有、int流
IntStream stream = Arrays.stream(ints);
//静态方法创建流
Stream integerStream = Stream.of(1, 2, 3, 4, 4);
//filter 过滤 数组中大于5的
stream.filter( i -> i>5)
.limit(3) //结果截取前 3个
.skip(2)//结果天国前 2个
.distinct()// 去除重复结果
.forEach( System.out :: println);
//无限流
Stream.iterate(0,t -> t+2)
.limit(10)
.forEach( System.out::println );
map
map 获取一个参数, 参数转换为其他形式互获取元素信息
flatmap 把流中的值 转换成另一个流 再把所有流合并
ArrayList排序arr = new ArrayList (); arr.add("aa");arr.add("bb");arr.add("cc"); Stream arrStream = arr.stream(); arrStream.map( str -> str.toUpperCase())//输出大写 .forEach(System.out :: println);
| Sotred() | 产生一个流,自然排序 |
|---|---|
| Sotred(Comparator com) | 产生一个流,按照比较器排序 |
Streamstream = Arrays.asList(11, 21, 41, 31, 22, 12).stream(); stream.sorted().forEach( System.out::print );//11 12 21 22 31 41
Stream终止操作stream = Arrays.asList(11, 21, 41, 31, 22, 12).stream(); stream.sorted( (o1,o2) -> o1.compareTo(o2) ).forEach( System.out :: println );
| 方法 | 描述 |
|---|---|
| allMatch(Predicate p) | 检查是否匹配所有元素 |
| anyMatch(Predlcate p) | 检查是否至少匹配一个元素 |
| noneMatch(Predicate p) | 检查时否没有匹配所有元素 |
| findFirst() | 返回第一个元素 |
| findAny() | 返回当前流中任意元素 |
| count() | 返回流中元素个数 |
| max(Comparator c) | 返回流中最大值 |
| min(Comparator c) | 返回流中最小值 |
| forEach(Consumer c) | 内部迭代 s |
数据
ArrayListallMath() 返回值:booleanarr = new ArrayList<>(); arr.add(new user("张三",20)); arr.add(new user("奥斯丁",21)); arr.add(new user("温顿",22));
//判断是否是所有员元素满足条件 boolean返回值 boolean b = stream.allMatch(user -> user.getAge() > 21);anyMath() 返回值:boolean
//有一个匹配即可 boolean b1 = stream.anyMatch(user -> user.getAge() > 21);noneMatch 返回值:boolean
//是否没有 包含 张三
boolean s = stream.noneMatch(user -> user.getName().equals("张三"));
findAn 获取任意元素
//获取任意元素 可以有中间操作 stream.sorted().findAny();findFirst 获取第一个元素
//获取第一个元素 可以有中间操作 tream.sorted().findFirst();conut 流中元素个数
//count 元素个数 ong count = stream.distinct().count();max 返回流中最大值
//map 映射出年纪, 在取最大值 stream.map( user::getAge ).max( Integer::compareTo );min 最小值
stream.map(user::getAge).min(Integer::compareTo);forEach 内部迭代
stream.forEach(System.out:: println);收集 collect (终止操作)
//单那个元素的结果收集 stream().collect(Collectors.toSet()); stream().collect(Collectors.toList());归约
| 方法 | 描述 |
|---|---|
| reduce(T iden,BinaryOperator b) | 可以将流中元素返回给姐哈起来,得到一个值,返回T |
| reduce(BinaryOperator b) | 可以将流中元素返回结合起来,得到一个值,返回Optional |
//归约 求和 Arrays.asList(1,2,3,4,5,6,7).stream().reduce(0,Integer::sum);Optional
java.util.Optional
创建 Optional 对象
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R9Po4cmU-1643430913719)(/Users/luofeng/Library/Application Support/typora-user-images/image-20220129122816735.png)]
of -> 创建一个 必须非空的
empty. -> 创建一个空的
ofNullable -> 可以为空的
非空判断
boolena isPresent(). ->判断是否包含对象void ifPresent(Consumer super T>consumer) ->如果有值,就执行conusmer
获取 Optional 容器内对象
T get() ->返回对象内 值,(user、map、list…)T orElseGet(Supplier extends T>other ) ->如果有值则将其返回,否则由supplier接口实现题共对象T orElse throw(Supplier extends X>exceptionSupplier) ->如果有值则返回,否则返回由 supplier 接口提供的异常 以前
多层if 取非空判断
//非空判断
public String notNull(user u){
if( u != null ){
if( u.getName() != null)
return u.getName();
}
return "0";
}
optional
public static String optional(user u) {
//创建对象 内容可以为nukl
Optional u1 = Optional.ofNullable(u);
//u1 为空的时候,创建 对象 加入u2
user u2 = u1.orElse(new user("无效对象", 0));
return u2.getName();
}



