程序员为了不天天996加班,学习java8流式语法提高开发效率

程序员、java8、后端开发、码农

java8

吐槽

程序员为了不天天996加班

学习java8流式语法提高开发效率

很多人吐槽性能低

你想想坐飞机多快,但为什么做高铁的人多了

这就是成本问题

目标

这里不谈底层原理,就把工作中实用的小demo输出

  • java8流式语法
  • map
  • filter
  • Optional
  • findFirst
  • ::方法引用
  • limit
  • skip

上代码案例

创建学生类和文具类,看json关系

程序员为了不天天996加班,学习java8流式语法提高开发效率

每个学生有多套文具

List a=Lists.newArrayList(

new Stationery("钢笔","红本")

,new Stationery("钢笔","本子"));

List b=Lists.newArrayList(

new Stationery("圆珠笔","绿本"));

List c=Lists.newArrayList(

new Stationery("钢笔","蓝子"),

new Stationery("铅笔","黄本"));

初始化学生数据

List students=new ArrayList<>();

students.add(new Student(

"001","程序汪","男", a,18));

students.add(new Student(

"002","小红","女", b,11));

students.add(new Student(

"003","小美","女", c,10));

Optional防空利器

说白了把if-else语法的压扁了

//集合防空

Optional

.ofNullable(students)

.orElse(Collections.emptyList())

. forEach(System.out::println);

1

Optional+findFirst

集合中找一条数据

Optional oFindFirst=students.stream()

.filter(Objects::nonNull)

.map(Student::getName)

.filter(f->StringUtils.equals(f,"程序汪"))

.findFirst();

这样判断和if-else没区别

if(oFindFirst.isPresent()){

System.out.println("给"+oFindFirst.get()+"发奖金啦");

}

那就来个简洁的ifPresent

oFindFirst.ifPresent(f->{System.out.println("给"+f+"发奖金啦");});

1

filter过滤

students.stream()

.filter(Objects::nonNull)

.forEach(f->{

System.out.println(f.getName());

});

map

集合变形

List names=students.stream()

.filter(Objects::nonNull)

.map(Student::getName)

.collect(Collectors.toList());

names.forEach(System.out::println);

flatMap扁平化

和map的区别是,map是1对1的,flatMap是1对多

相等有集合list.add 和list.addAll区别

如下把学生集合中文具集合属性,扁平化在输出

对应复杂的集合嵌套类,处理起来非常爽

students.stream()

.filter(Objects::nonNull)

.map(Student::getStationerys)

.flatMap(List::stream)

.forEach(System.out::println);

list转map

Map map=students.stream()

.filter(Objects::nonNull)

.collect(

Collectors

.toMap(Student::getStudentId,s->s));

System.out.println(JSON.toJSON(map));

输出结果

程序员为了不天天996加班,学习java8流式语法提高开发效率

1

list转map分组

Map> map2=students

.stream()

.filter(Objects::nonNull)

.collect(Collectors.groupingBy(stu->stu.getSex()));

1

程序员为了不天天996加班,学习java8流式语法提高开发效率

limit

当集合空是limit返回的是一个空集合不是null

这样不容易NEP

List names2=students.stream()

.filter(Objects::nonNull)

.map(Student::getName)

.filter(f->StringUtils.equals(f,"aaa"))

.limit(1).collect(Collectors.toList());

names2.forEach(System.out::println);

skip

limit+skip类似mysql的limit关键字用法

List names33=students.stream()

.filter(Objects::nonNull)

.map(Student::getName)

.skip(2)

.limit(1).collect(Collectors.toList());

names33.forEach(System.out::println);

集合排序

那是相当简洁

Collections.sort(students,

Comparator.comparing(Student::getAge));

students.forEach(System.out::println);

并行

不能乱用小心线程安全问题,后面有空单独整理下这个并行的

students.parallelStream().forEach(System.out::println);

输出结果

程序员为了不天天996加班,学习java8流式语法提高开发效率程序员为了不天天996加班,学习java8流式语法提高开发效率

java8流语法历史文章

流语法list转map玩法分组等等

lambda常见功能玩法

java8流语法return用法注意

lambda的集合变形map

流语法的简洁排序

欢迎程序员专家喷我,指出问题


分享到:


相關文章: