函数编程及Stream流计算
函数编程及Stream流计算
常用函数编程接口
| 函数式接口 | 参数类型 | 返回类型 | 用途 |
|---|---|---|---|
| Consumer 消费型接口 |
T | void | 对类型为T的对象应用操作,包含方法:void accept(T t) |
| Supplier 供给型接口 |
无 | T | 返回类型为T的对象,包含方法:T get() |
| Funciton<T,R> 函数型接口 |
T | R | 对类型为T的对象应用操作,并返回结果,包含方法:R apply(T t) |
| Predicate 断定型接口 |
T | boolean | 确定类型为T的对象是否满足某约束条件,包含方法:boolean test(T t) |
常用函数编程案例
public static void main(String[] args) throws Exception {
Function<String,String> f = t -> t+"你好";
System.out.println(f.apply("溪风"));
Consumer<String> c = t -> System.out.println(t+"你好啊");
c.accept("溪风");
Supplier s = () -> "溪风你好啊";
System.out.println(s.get());
Predicate<Integer> p = t -> {
if(t>=18){
return true;
}
return false;
};
System.out.println("是否成年?"+p.test(18));
}
stream流计算
stream特点
- stream自己不会存储元素
- stream不会改变源对象。相反他们会返回一个持有结果的新stream
- stream操作时延迟执行的。这意味着他们会等到需要结果的时候才执行
stream执行阶段
源头=》中间流水线=》结果
- 创建一个stream:一个数据源(数组、集合)
- 中间操作:处理数据源数据
- 终止操作:执行中间操作链,产生结果
小小案例
public static void main(String[] args) throws Exception {
Integer [] arr = {1,3,5,6,7,8,3,9,13,5};
//数据过滤案例
Arrays.stream(arr)
//只需要%2等于0的数据
.filter(t -> t%2 == 0)
//输出
.forEach( on -> System.out.println(on));
//将数组的元素乘以2生成新的list集合并降序排序,只取一个值
List<Integer> collect = Arrays.stream(arr).map(t -> t * 2).
//降序排序
sorted( (o1,o2) -> o2.compareTo(o1) ).
//取的数值
limit(1).
//生成新的集合
collect(Collectors.toList());
collect.stream().forEach(System.out::println);
}

浙公网安备 33010602011771号