java8学习整理二

简介: java8不但可以提高代码的运行的性能,而且实现起来很优雅,因此学习它是不错的选择。今天写这篇文章,是因为看到我们部门大佬写的代码,因此将其还原成匿名内部类的时候发现这个retrun是不能省掉的,省去会报错。同时还可以学习到map如果在筛选条件中只有一行的时候,是可以不需要return的,这个是与中间有处理过程是不同的。因此就有了

java8不但可以提高代码的运行的性能,而且实现起来很优雅,因此学习它是不错的选择。

今天写这篇文章,是因为看到我们部门大佬写的代码,因此将其还原成匿名内部类的时候发现这个retrun是不能省掉的,省去会报错。同时还可以学习到map如果在筛选条件中只有一行的时候,是可以不需要return的,这个是与中间有处理过程是不同的。因此就有了下面的学习:

publicList<CmPatientBasePO>listAll(IntegerfkHospId, IntegerfkTenantId) {
CmPatientcmPatient=newCmPatient();
cmPatient.setFkHospId(Objects.isNull(fkHospId) ?UserUtils.getHospId() : fkHospId);
cmPatient.setFkTenantId(Objects.isNull(fkTenantId) ?UserUtils.getTenantId() : fkTenantId);
List<CmPatient>cmPatientList=cmPatientPOMapper.listByCondition(cmPatient);
if (CollectionUtils.isEmpty(cmPatientList)) {
returnCollections.emptyList();
    }
returncmPatientList.stream().filter(Objects::nonNull).map(patient-> {
CmPatientBasePOcmPatientBasePO=newCmPatientBasePO();
BeanUtils.copyProperties(patient, cmPatientBasePO);
cmPatientBasePO.setAliasInitials(patient.getSpellInitials());
cmPatientBasePO.setPatientName(patient.getAliasName());
returncmPatientBasePO; //需要返回值,此时不可省略    }).collect(Collectors.toList());
}

首先map和peek之间的区别和使用

map是有返回值的,而peek作为中间处理过程,其返回的值是void,这是两者最大的区别,其次官方推荐使用map。而使用peek可以进行中间处理,方便对数据的处理。

/*** @author lyz* @date 2020/5/12 17:03**/publicclassDemo {
publicstaticvoidmain(String[] args) {
Stream.of("小王:18","小杨:20").map(newFunction<String, People>() {
@OverridepublicPeopleapply(Strings) {
String[] str=s.split(":");
Peoplepeople=newPeople(str[0],Integer.valueOf(str[1]));
returnpeople;
            }
        }).forEach(people->System.out.println("people = "+people));
    }
}

运行结果:

people=People{name='小王', age=18}
people=People{name='小杨', age=20}

修改成map实现:

/**** @description: lambda学习* @author: lyz* @date: 2020/05/12 14:48**/publicclassdemo2 {
publicstaticvoidmain(String[] args) {
Stream.of("小王:18","小杨:20").map((Strings)->{
String[] str=s.split(":");
Peoplepeople=newPeople(str[0],Integer.valueOf(str[1]));
returnpeople; //此处不可省略        }).forEach(people->System.out.println("people = "+people));
    }
}

运行结果:

people=People{name='小王', age=18}
people=People{name='小杨', age=20}

修改成peek实现:

/**** @description: lambda学习* @author: lyz* @date: 2020/05/12 15:16**/publicclassDemo5 {
publicstaticvoidmain(String[] args) {
Stream.of("小王:18","小杨:20").peek((Strings)->{
String[] str=s.split(":");
Peoplepeople=newPeople(str[0],Integer.valueOf(str[1])); //这里没有return,因此返回的void        }).forEach(people->System.out.println("people = "+people));
    }
}

运行结果:

people=小王:18people=小杨:20

进行数据过滤

/**** @description: stream流学习* @author: lyz* @date: 2020/05/12 15:22**/publicclassDemo6 {
publicstaticvoidmain(Stringargs[]){
List<Map<String,Object>>list=newArrayList<>();
for(inti=0;i<5;i++){
Map<String,Object>map=newHashMap<>();
map.put("type",i);
list.add(map);
        }
System.out.println("list过滤前的数据:"+list);
System.out.println("list过滤前的数量:"+list.size());
//过滤获取 type=2的数据List<Map<String,Object>>list2=list.stream().filter((Mapa) -> ("4".equals(a.get("type").toString()))).collect(Collectors.toList());
//只获取数量也可以这样写Longlist2Count=list.stream().filter((Mapa) -> ("4".equals(a.get("type").toString()))).count();
System.out.println("list过滤后的数据:"+list2);
System.out.println("list过滤后的数量:"+list2Count);
System.out.println("list过滤后的数量:"+list2.size());
    }
}

运行结果:

list过滤前的数据:[{type=0}, {type=1}, {type=2}, {type=3}, {type=4}]
list过滤前的数量:5
list过滤后的数据:[{type=4}]
list过滤后的数量:1
list过滤后的数量:1

进行数据过滤:

/**** @description: lambda学习 使用过滤+循环* @author: lyz* @date: 2020/05/12 15:24**/publicclassDemo7 {
publicstaticvoidmain(String[] args) {
/*  List<String> strArr = Arrays.asList("1", "2", "3", "4");strArr.stream().filter(str ->{return "2".equals(str)?true:false;}).forEach(str ->{System.out.println(str);System.out.println(str+1);});*/List<String>strArr=Arrays.asList("1", "2", "3", "4");
strArr.stream().filter(str->"2".equals(str)?true:false).forEach(str->{
System.out.println(str);
System.out.println(str+1);
        });
    }
}

运行结果:

2
21

基于扁平流实现:

/**** @description: lambda学习 扁平流使用* @author: lyz* @date: 2020/05/12 16:00**/publicclassDemo12 {
publicstaticvoidmain(String[] args) {
List<Student>students=newArrayList<>(4);
students.add(newStudent("百花", 22, 175));
students.add(newStudent("白条", 40, 178));
students.add(newStudent("略一", 40, 180));
students.add(newStudent("畅享", 50, 185));
List<Student>list=students.stream()
                .filter(stu->stu.getStature() <180)
                .collect(Collectors.toList());
System.out.println(list);
List<Student>students1=newArrayList<>();
students1.add(newStudent("拉普斯", 22, 175));
students1.add(newStudent("洛夫斯基", 40, 178));
List<Student>studentList=Stream.of(students, students1)
                .flatMap(stu->stu.stream()).collect(Collectors.toList());
System.out.println(studentList);
System.out.println("==============================");
Optional<Student>max=students.stream()
                .max(Comparator.comparing(stu->stu.getAge()));
Optional<Student>min=students.stream()
                .min(Comparator.comparing(stu->stu.getAge()));
//判断是否有值if (max.isPresent()) {
System.out.println(max.get());
        }
if (min.isPresent()) {
System.out.println(min.get());
        }
longcount=students.stream().filter(s1->s1.getAge() <45).count();
System.out.println("年龄小于42岁的人数是:"+count);
    }

运行结果:

[Student{name='百花', age=22, stature=175}, Student{name='白条', age=40, stature=178}]
[Student{name='百花', age=22, stature=175}, Student{name='白条', age=40, stature=178}, Student{name='略一', age=40, stature=180}, Student{name='畅享', age=50, stature=185}, Student{name='拉普斯', age=22, stature=175}, Student{name='洛夫斯基', age=40, stature=178}]
==============================Student{name='畅享', age=50, stature=185}
Student{name='百花', age=22, stature=175}
年龄小于42岁的人数是:3

进行字符串拼接

/**** @description: 学习java8,字符串拼接* @author: lyz* @date: 2020/05/12 16:23**/publicclassDemo13 {
publicstaticvoidmain(String[] args) {
List<Student>students=newArrayList<>(3);
students.add(newStudent("绿衣", 22, 175));
students.add(newStudent("红妆", 40, 180));
students.add(newStudent("水月", 50, 185));
Stringnames=students.stream()
                .map(Student::getName).collect(Collectors.joining(",","[","]"));
System.out.println(names);
    }
}

运行结果:

[绿衣,红妆,水月]

进行分组操作

/**** @description: 进行lambda学习,进行分组操作* @author: lyz* @date: 2020/05/12 16:43**/publicclassDemo15 {
publicstaticvoidmain(String[] args) {
List<User>users=Lists.newArrayList(
newUser("高三1班", "stu01", "男"),
newUser("高三1班", "stu02", "女"),
newUser("高三2班", "stu11", "男"),
newUser("高三2班", "stu12", "女"),
newUser("高三3班", "stu21", "女"),
newUser("高三3班", "stu22", "男"),
newUser("高三3班", "stu23", "女"));
Map<String, List<User>>collect=users.stream().collect(groupingBy(User::getClassName));
System.out.println(JSON.toJSONString(collect));
System.out.println();
Map<String, Long>collect1=users.stream().collect(groupingBy(User::getClassName, Collectors.counting()));
System.out.println(JSON.toJSONString(collect1));
System.out.println();
Map<String, Map<String, User>>collect2=users.stream().collect(groupingBy(User::getClassName, Collectors.toMap(User::getStudentName, o->o)));
System.out.println(JSON.toJSONString(collect2));
System.out.println();
    }
privatestaticclassUser {
privateStringclassName;
privateStringstudentName;
privateStringsex;
//省略get/set与构造函数    }
}

结果:

{"高三3班":[{"className":"高三3班","sex":"女","studentName":"stu21"},{"className":"高三3班","sex":"男","studentName":"stu22"},{"className":"高三3班","sex":"女","studentName":"stu23"}],"高三2班":[{"className":"高三2班","sex":"男","studentName":"stu11"},{"className":"高三2班","sex":"女","studentName":"stu12"}],"高三1班":[{"className":"高三1班","sex":"男","studentName":"stu01"},{"className":"高三1班","sex":"女","studentName":"stu02"}]}
{"高三3班":3,"高三2班":2,"高三1班":2}
{"高三3班":{"stu21":{"className":"高三3班","sex":"女","studentName":"stu21"},"stu23":{"className":"高三3班","sex":"女","studentName":"stu23"},"stu22":{"className":"高三3班","sex":"男","studentName":"stu22"}},"高三2班":{"stu12":{"className":"高三2班","sex":"女","studentName":"stu12"},"stu11":{"className":"高三2班","sex":"男","studentName":"stu11"}},"高三1班":{"stu02":{"className":"高三1班","sex":"女","studentName":"stu02"},"stu01":{"className":"高三1班","sex":"男","studentName":"stu01"}}}


目录
相关文章
|
1月前
|
编解码 Oracle Java
java9到java17的新特性学习--github新项目
本文宣布了一个名为"JavaLearnNote"的新GitHub项目,该项目旨在帮助Java开发者深入理解和掌握从Java 9到Java 17的每个版本的关键新特性,并通过实战演示、社区支持和持续更新来促进学习。
79 3
|
29天前
|
XML Java 编译器
Java学习十六—掌握注解:让编程更简单
Java 注解(Annotation)是一种特殊的语法结构,可以在代码中嵌入元数据。它们不直接影响代码的运行,但可以通过工具和框架提供额外的信息,帮助在编译、部署或运行时进行处理。
87 43
Java学习十六—掌握注解:让编程更简单
|
14天前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
1月前
|
存储 SQL 小程序
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
这篇文章详细介绍了Java虚拟机(JVM)的运行时数据区域和JVM指令集,包括程序计数器、虚拟机栈、本地方法栈、直接内存、方法区和堆,以及栈帧的组成部分和执行流程。
32 2
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
|
22天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
1月前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
42 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
|
1月前
|
前端开发 Java 应用服务中间件
Javaweb学习
【10月更文挑战第1天】Javaweb学习
33 2
|
1月前
|
存储 安全 Java
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
24 3
|
1月前
|
存储 安全 Java
【用Java学习数据结构系列】探索栈和队列的无尽秘密
【用Java学习数据结构系列】探索栈和队列的无尽秘密
30 2
|
1月前
|
存储 Java 编译器
【用Java学习数据结构系列】初识泛型
【用Java学习数据结构系列】初识泛型
20 2