首页 > 自考资讯 > 自考知识

java8新特性常用方法,java8新特性常用发发

头条共创 2024-06-27

一、Lambda 表达式

4个内置接口

函数式接口只有一种方法的接口

1)消费者

这是一个函数式接口,只有一个接受方法。

接受一个参数并且不返回任何值

d4c944c3211443aebbf10495777f03d0~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720036356&x-signature=zC6lCcj2c4tjeLOb4jiw3sTpof0%3D2) 谓词

接受泛型类型并返回布尔值

功能

需要两个,一个是输入参数,一个是返回值

d4a80226c53c42878bd6beb6bbe8e262~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720036356&x-signature=vzx7XyIHHjwK4%2FQL4BFaXAZnXKQ%3D3) 供应商

传递参数并返回对象

15a9f24f541e4b9bb6beebb9bda6c8f3~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720036356&x-signature=HcPBhSgeE5WuwY45h%2Flk5PpJYIA%3D

二、stream 流

1. 获取流

1) 集合类xxx.stream()

2)数组

对象[] 对象={1,2,3,4,5,6};

StreamObject 流=Arrays.stream(objects);

2、中间操作

1.1) 映射对流中的每个对象应用相应的操作。

/*给定一个数字列表,返回一个平方列表*/ListInteger integerList=Arrays.asList(1, 2, 3, 4, 5);ListIntegercollectList=integerList.stream() .map(x - x=x * x ) .collect(Collectors.toList());System.out.println(collectList);1.2) 映射提取对象中的信息

例子

数据

交易者拉乌尔=新交易者('raoul', '剑桥'); 交易者马里奥=新交易者('马里奥', '米兰'); 交易者艾伦=新交易者('艾伦', '剑桥'); ('布莱恩', '剑桥');ListTransactiontransactionList=Arrays.asList( new Transaction(brian, 2011, 300), new Transaction(raoul, 2012, 1000), new Transaction(raoul, 2011, 400), new Transaction( 马里奥, 2012, 710), 新交易(mario, 2012, 700), 新交易(alan, 2012, 950));

@Testpublic void test08() { //提取所有交易者的姓名并删除重复的transactionList.stream() .map(Transaction:getTrader) .map(Trader:getName) .distinct() .forEach(System.out:println);

来分析

ef45369ab8304f3b970bf66da0512301~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1720036356&x-signature=0K6Pw5ZBTYBqIUQX0EHRVH587Hg%3D 在第一个流之后,流中存在一个Transaction 对象,再次映射后,流中存在一个Trader 对象。使用重复数据删除,因为可能存在重复项。

最终得到所有交易者的名字

2)过滤器过滤器

示例3 过滤器仅留下大于的数字

ListInteger integerList=Arrays.asList(1, 2, 3, 4, 5);integerList.stream() .filter(x-x3) .forEach(System.out:println);3)skip()

请跳过前几条

4)distinct() 删除重复项

5)sorted(),默认为自然排序。您可以定义排序规则。

3. 完成操作

## 1)分组,将流中的数据根据条件分为不同的组

数据如下

``Java

ListEmployee 员工列表=Arrays.asList(

new Employee(101, '张三', 10, '1111.0', Status.FREE),

new Employee(102, '李四', 20, '2222.0', Status.FREE),

新员工(104,'Tenshichi',30,'4444.0',Status.VOCATION),

新员工(103,'Ogo',30,'3333.0',Status.FREE),

新员工(105, '天恒', 50, '5555.0', Status.FREE),

新员工(106, '珩媛', 60, '6666.0', Status.VOCATION),

新员工(105, '天恒', 40, '9999.0', Status.BUSY),

新员工(105, '天恒', 40, '7777.0', Status.BUSY)

);

测试代码

逻辑:根据年龄将员工分为三组:青年、中年、老年。

@Testpublic void test08() { //分组ConcurrentMapStatus, MapString, ListEmployee groups=employeeList.stream() .collect(Collectors.groupingByConcurrent(Employee:getStatus, Collectors.groupingBy(employee - { if (employee.getAge()=35)) { return '年轻'; } else if (employee.getAge()=50) { return '中年'; } else { return '老' } })) . is '+value);}输出结果

## 2)分区

它可以分为两个区域:真和假。

@Testpublic void test09() { //分区MapBoolean, ListEmployee PartitioningByAge=employeeList.stream() .collect(Collectors.partitioningBy(employee -employee.getAge() 35)); out.println('关键是'+key+' \n值是'+value));}## 3) count()

返回长数据,即流中对象的数量。

## 4) 收藏

ArrayListEmployee Collect 1=EmployeeList.Stream() .collect(Collectors.toCollection(ArrayList:new));

## 5) 减少

## 4) 最大。

5分钟

## 全部匹配全部匹配

## 至少一场比赛anyMatch

## 如果没有匹配的元素则返回true,否则返回false。

---

#3. 分叉加入

## 工作窃取模式

原则

多个工作线程被拆分,每个线程独立并行工作,如果一个线程完成而另一个线程没有完成,则它会继承另一个线程的最终工作并继续执行,因此,CPU 上的每个线程都会被执行。核资源可以平等利用。

传统线程会等待最慢的线程完成执行,然后才能完成整个工作。 ForkJoin 窃取工作来共享最慢的工作。

### 累加器示例加到10 亿

### 第一个模块,分工算法

继承RecursiveTask,实现compute()方法,获取返回值。

继承自RecursiveAction,实现无返回值的compute()方法。

public class ForkJoinCal extends RecursiveTaskLong { /** * RecursiveAction * protected abstract voidcompute(); private Long start; public ForkJoinCal(Long start, Long end) { this.start=start this.end=end; } @Override protected Longcompute() { Long length=end-start; if (length=THRESODLD){ Long sum=0L; end;i++){ sum+=i; }else { Long middle=(start + end)/2; ForkJoinCal left=new ForkJoinCal(start ,middle); forkJoinCal right=new ForkJoinCal(middle + 1, end); //拆分子任务并入栈right.fork();join()+right.join(); }### 在第二个模块中,使用:

@Testpublic void test01(){ Instant start=Instant.now(); ForkJoinTaskLong forkJoinCal(0L,1000000000L); ('this is sum : '+sum);可见使用率非常高。

## 并行流。实施积累

//Parallel Stream LongreduceSum=LongStream.range(0, 100000001L) //Parallel Stream .Parallel() .reduce(0, Long:sum); 底层同样使用了

四、Optional

提供的fork join机制。新的界面确保快速定位到零。

1.empty() 创建一个空对象。该对象不为null,但该对象的属性为null。

2. of() 创建一个可为空的对象

3. ofNullable() 创建一个对象并调用empty() 和of()。

4. isPresent() 判断对象是否为null,null返回false。或者Else (T t) 如果object 为null,则创建一个默认对象t。

5. orElseGet 允许您自己定义和构造默认对象

五、新的时间API

即时

本地日期时间

间隔

时期

版权声明:本文由今日头条转载,如有侵犯您的版权,请联系本站编辑删除。

猜你喜欢