Java_JDK8新特性

接口定义增强

旧:接口中只能定义最终变量和抽象方法
接口可以定义:1、默认方法 2、静态方法

Lamda表达式(函数式接口)

旧:匿名内部类(可以实现多个抽象方法)
1、(参数) -> 单行语句;
2、(参数) -> {多行语句};
3、(参数) -> 表达式;
示例如下:
interface Pr {
public int add(int a,int b);
}
main方法{
fun((a,b) -> a + b); //调用
}
public static void fun(Pr pr) {
System.out.print(pr.add(1,2)); //3
}

方法引用(函数式接口)

使用java8下java.util.function提供的四种通用函数式接口(推荐)
1)功能Function<T,R> R apply(T t)
2)消费Consumer void accept(T t)
3)供给Supplier T get()
4)断言Predicate boolean test(T t)
BiFunction<T,U,R> R apply(T t,U u)

可以自定义函数式接口(不推荐)
定义要求:接口中只能有一个抽象方法;接口名上需要添加@FunctionInfterface注解
1、类 :: 静态方法
2、对象 :: 普通方法
3、类 :: new
4、特定类 :: 普通方法
Function<String,String> fun = String :: toUpperCase;
String result = fun.apply(“abc”); //ABC

流式编程(Stream)

BaseStream
子类:Stream 、DoubleSteam(下面有个统计方法summaryStatistics())、IntStream、LongStream
Java8集合
Collection接口提供了默认方法
default Stream stream()获取数据流(可以理解加工厂)
default forEach(Consumer con);

Stream接口提供了很多处理集合数据的方法:
Stream map(Function fun); 逐个处理集合内数据
Stream filter(Predicate pre); 过滤
Stream skip(long n); 设置跳过的数据行数
Stream limit(long maxSize); 设置取出的数据个数
boolean allMatch(Predicate pre); 全匹配
boolean anyMatch(Predicate pre); 匹配任意一个
Option reduce(BiFunction bf)

Predicate函数式接口提供了默认方法:可以实现多个条件匹配
default Predicate or(Predicate pre);
default Predicate and(Predicate pre);

List list = new ArrayList();
list.add(“Java”);
list.add(“Java”);
list.add(“Android”);
List newList = list.stream().distinct.map((x) -> x.toLowerCase()).filter((x) -> x.contains(“a”)).collect(Collectors.toList());
newList.forEach(System.out::println);

数据统计示例:
方式一:简单MapReduce处理分析数据示例:
double s = all.stream().map((x) -> x.getAmount() * x.getPrice()).reduce((sum,s) -> sum + s).get();
方式二:使用DoubleStream流
DoubleSummaryStatistics dss = all.stream.mapToDouble((x) -> x.getAmount() * x.getPrice()).summaryStatistics();
dss.getAverage()
dss.getCount();
dss.getMax();
dss.getSum();

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值