目录:
第一篇:初探 java8 第 01 篇( Lambda与Stream API初识 )
第二篇:深入 java8 第 02 篇( Lambda表达式基础语法 )
第三篇:深入 java8 第 03 篇( 函数式接口,常见的4个函数式接口 )
第四篇:深入 java8 第 04 篇( 方法引用与构造器引用 )
第五篇:深入 java8 第 05 篇( Stream API 的操作->创建及中间操作 )
第六篇:深入 java8 第 06 篇( Stream API 的操作->终止操作 )
第七篇:深入 java8 第 07 篇( Stream API 的操作->规约、收集 )
第八篇:深入 java8 第 08 篇( Stream API 的综合练习 )
第九篇:深入 java8 第 09 篇( Fork/Join 框架的使用及其优势 )
第十篇:深入 java8 第 10 篇( 时间新特新 -> DateTimeFormatter 解析与格式化 )
第十一篇:深入 java8 第 11 篇( 带时区的时间或日期)
第十二篇:深入 java8 第 12 篇(接口中的默认方法与静态方法 )
第十三篇:深入 java8 第 13 篇( 其他新特性 -> Optional 类/重复注解与类型注解 )
深入 java8 第 08 篇 ( Stream API 的综合练习 )
8.1 Stream API 的相关练习
8.1.1 准备测试数据
private List sales = null;
private Integer[] num = new Integer[]{1,2,3,4,5,6,};
@Before
public void Before(){
Employee emma = new Employee(001, "Emma", 41, 20000, Status.FREE);
Employee Mary = new Employee(002, "Mary", 39, 18000, Status.BUSY);
Employee Allen = new Employee(003, "Allen", 33, 15000, Status.BUSY);
Employee Olivia = new Employee(004, "Olivia", 52, 32000, Status.FREE);
Employee Natasha = new Employee(005, "Natasha", 27, 13000, Status.BUSY);
Employee Kevin = new Employee(006, "Kevin", 25, 10000, Status.FREE);
Employee Haivent = new Employee(007, "Haivent", 25, 12000, Status.FREE);
sales = Arrays.asList(
new SalesPerson(emma, "ChengDu", "2005"),
new SalesPerson(Mary, "ShangHai", "2010"),
new SalesPerson(Allen, "ShangHai", "2005"),
new SalesPerson(Olivia, "ShenZhen", "2006"),
new SalesPerson(Natasha, "ChengDu", "2008"),
new SalesPerson(Kevin, "ChengDu", "2005"),
new SalesPerson(Haivent, "BeiJing", "2005")
);
}
8.1.2 求的一个整数数组列表的平方根
@Test
public void test01(){
Arrays.stream(num)
.map((e) -> e * e )
.forEach(System.out::println);
}
8.1.3 使用 reduce 求出员工总人数
@Test
public void test02(){
Optional reduce = sales.stream()
.map((e)->1)
.reduce(Integer::sum);
System.out.println(reduce.get());
}
8.1.4 筛选出 2005 年入职的员工,并按薪资从低到高排序
@Test
public void test03(){
sales.stream()
.filter((s)->s.getEntryYear() == 2005+"")
.sorted((x,y) -> Double.compare(x.getEmployee().getSalary(), y.getEmployee().getSalary()))
.forEach(System.out::println);
}
8.1.5 该公司的员工都分布与那些城市,并排序
@Test
public void test04(){
sales.stream()
.map((s) -> s.getAddress())
.distinct()
.sorted()
.forEach(System.out::println);
}
8.1.6 获取所有员工姓名,并按首字母排序
@Test
public void test05(){
sales.stream()
.map((s) -> s.getEmployee().getName())
.sorted()
.forEach(System.out::print);
// 通过 reduce 进行反复结合,并返回一个字符串
System.out.println();
String reduce = sales.stream()
.map( e -> e.getEmployee().getName())
.sorted()
.reduce("",String::concat);
System.out.println("\n"+reduce);
System.out.println();
sales.stream()
.map( s -> s.getEmployee().getName())
.flatMap(StreamExercise::filterCharacter)
.sorted((x,y) -> x.compareTo(y))
.forEach(System.out::print);
}
private static Stream<Character> filterCharacter(String str){
List<Character> list = new ArrayList<>();
for (Character ch : str.toCharArray()) {
list.add(ch);
}
return list.stream();
}
8.1.7 查看是否有成都的员工
@Test
public void test06(){
boolean anyMatch = sales.stream()
.anyMatch( s -> s.getAddress().equals("ChengDu"));
System.out.println(anyMatch);
}
8.1.8 获取所有成都的员工的薪资总和
@Test
public void test07(){
Optional reduce = sales.stream()
.filter( s -> s.getAddress().equals("ChengDu"))
.map( s -> s.getEmployee().getSalary())
.reduce(Double::sum);
System.out.println(reduce.get());
}
8.1.9 获取公司中薪资最高的薪资
@Test
public void test08(){
Optional max = sales.stream()
.map(s -> s.getEmployee().getSalary())
.max(Double::compare);
System.out.println(max.get());
}
8.1.10 获取公司中薪资最低的员工信息
@Test
public void test09(){
Optional min = sales.stream()
.min((x,y) -> Double.compare(x.getEmployee().getSalary(), y.getEmployee().getSalary()));
System.out.println(min.get());
}
源码下载地址:https://download.csdn.net/download/hello_world_qwp/10401249