开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第29天,点击查看活动详情
不忘初心寻找曾经的自己
前情提要
- 《北京爱情故事》里的石小猛刚出场时也是怀揣功与名,奈何慢慢的迷失自我 。
- 人生路漫长,迷路太正常,迷路不可怕,快点找方向。哎,人哪,迷失自我的时候,很难找准方向啊!
- 今天让我们尝试找寻丢失的 String 地址吧!
开始整体说法
- 小猛幡然悔悟之后决定开始寻找自我的路程,他找了当时技术大神小希说: "希神! 请你帮我设计一套程序寻找自我吧"。
public static void main(String[] args) {
String first = "a";
String second = "a";
System.out.println(hash(first) + " " + hash(second));
System.out.println(first==second);
second = "c";
System.out.println(hash(first) + " " + hash(second));
System.out.println(first==second);
}
public static int hash(String text) {
return text.hashCode();
}
- String 并不是 Java 的基础类型数据,所以按照 Java 的传递特性 String 应该是引用传递。既然是引用传递那么上述代码 first,second 指向的就是同一个地址。
- 希神由于被诸事烦扰目前没有太多的精力去完善细节,好在大神已经设计好主体框架,下面需要聪明的你来帮忙完成剩下的工作帮助石小猛先生找回曾经的自己。
head
和body
代表石小猛的两大组成部分。
public class Practice {
public static void main(String[] args) {
String text = "head";
String pre = "body";
String result = "headbody";
int searchAddress = telnet(text,pre);
int resultAddress=System.identityHashCode(result);
System.out.println(resultAddress==searchAddress);
}
public static int telnet(String text, String pre) {
//开始找寻曾经之旅吧
return -1;
}
}
项目中的需求
【需求】 : 现有学生成绩表(学号、课程名称、成绩) 1、需要删选除成绩高于85分的数据,并且按照成绩从高到低排序 2、获取成绩最高分的学号 3、按课程分组求平均分 假设现查出的上述数据放在scoreList中。 List<Score> scoreList = new ArrayList<>();
Java7之前的做法
其实上面的需求很简单。稍微懂点代码的都应该能实现这个功能。今天我们强调的不是实现,而是实现的方式。所谓条条大路通罗马。我们今天将通过Java8新特性stream的方式实现。首先我们先来看看Java7甚至之
没有对比就没有伤害,没有stream的时代我们是多么的心酸,有了stream我们在面对数据库型需求我们就迎刃而解了。、
Stream定义
流操作被划分为中间和终端操作,并组合成流管道。一条Stream管道由一个源(如一个集合、一个数组、一个生成器函数或一个i/o通道)组成;
Java8之前我们的开发叫做【命令式编程】。Java8之后通过stream开发的我们叫做【申明式开发(函数式开发)】
- 惰性的它只有等到终端操作的时候才开始工作。
- 执行中间操作只是产生一条新流
- 执行完终端操作流就被销毁了。不能再被使用
- iterator、spliterator这两个相当于是扩展接口,在stream提供的功能不满足需求的情况时,我们在通过这两个接口进行【命令式开发】
- 在无限流作为源的情况下,通过某个中间操作(filter)产生一个有限流,这就叫短路
下面这张表格详细列出那些API是中间操作、那些是结束操作
Stream操作分类 | ||
---|---|---|
中间操作 | 无状态 | unordered() filter() map() mapToInt() mapToLong() mapToDouble() flatMap() flatMapToInt() flatMapToLong() flatMapToDouble() peek() |
有状态 | distinct() sorted() sorted() limit() skip() | |
结束操作 | 非短路操作 | forEach() forEachOrdered() toArray() reduce() collect() max() min() count() |
短路操作 | anyMatch() allMatch() noneMatch() findFirst() findAny() |