jdk1.8新特性
随着jdk的升级 ,会出现一些新的类:
- lambda表达式
- 文件操作类 Files Path paths
- Stream流式思想(流水线的思想)
eg:在集合中保存10个学生信息,信息式字符串的“张三,20,男”.
(遍历 普通 增强 iterator )
获取年龄大于20岁的年龄,String,改为int类型
public class StreamIO {
@Test
void stream() {
List<String> stus=new ArrayList<String>();
stus.add("张三,20,男" );
stus.add("李四,30,女" );
stus.add("王五,40,男" );
//将所有的age获取的保存到新的集合中
List<String> ages=new ArrayList<String>();
for (String stu : stus) {
//获取年龄字段
String[] split = stu.split(",");
ages.add(split[1]);
}
//将ages集合中的数据转为int类型的集合
List<Integer> age=new ArrayList<Integer>();
for (String sage : ages) {
//转类型
Integer valueOf = Integer.valueOf(sage);
age.add(valueOf);
}
//输出age>20的年龄
for (Integer a : age) {
if(a>20) {
System.out.println(a);
}
}
}
/*
* 使用流式Stream对象,类似与iterator,map方法使用lambda进行内容的过滤操作, 得到一个新的Stream
* stream的filter方法对Stream中的数据进行过滤操作,将不需要的数据过滤掉,得到一个新的Stream
* Stream的Foreach方法对Strsam流中的数据进行输出
*/
@Test
void stream01() {
List<String> stus=new ArrayList<String>();
stus.add("张三,20,男" );
stus.add("李四,30,女" );
stus.add("王五,40,男" );
//类似于Iterator,age字符串值
Stream<String> stulist = stus.stream();
Stream<String> sage = stulist.map(stu->stu.split(",")[1]);
sage.forEach(System.out::println);
//得到int类型
Stream<Integer> iage = sage.map(strage->Integer.valueOf(strage));
//使用过滤器思想
Stream<Integer> filter = iage.filter(age->age>20);
filter.forEach(System.out::println);
stus.stream().map(stu->stu.split(",")[1]).map(age->Integer.valueOf(age)).filter(age->age>20).forEach(System.out::println);
for (String string : stus) {
System.out.println(string);
}
}
//集合的spliterator
@Test
void spliterator() {
List<String> strs=new ArrayList<String>();
for (int i = 0; i < 10; i++) {
strs.add("100"+i);
}
//普通for循环
for (String s : strs) {
System.out.println(s);
}
//spliterator,主要是可以将集合数据 拆分为三个迭代器,如果结合多线程技术,同时使用三个对象类分别进行一个集合数据的遍历
//可以快速进行遍历
Spliterator<String> spliterator = strs.spliterator();// 第一个迭代器
Spliterator<String> trySplit = spliterator.trySplit();//第二个迭代器
Spliterator<String> trySplit2 = trySplit.trySplit();//第三个迭代器
spliterator.forEachRemaining(System.out::println);
System.out.println("============================");
trySplit.forEachRemaining(System.out::println);
System.out.println("============================");
trySplit2.forEachRemaining(System.out::println);
}
// 使用stream的 parallelStream
@Test
void parallelStream() {
List<String> strs=new ArrayList<String>();
for (int i = 0; i < 10; i++) {
strs.add("100"+i);
}
//创建一个printWriter
PrintStream out=System.out;
//类似于spliterator
Stream<String> parallelStream = strs.parallelStream();
//以下两个流,必须与第一个同时进行操作
Stream<String> parallel = parallelStream.parallel();
Stream<String> parallel2 = parallel.parallel();
parallelStream.forEach(out::println);
System.out.println("---------------------");
//第一个Steam已经执行结束,使用三个线程对象,也同时对三个stream进行操作
parallel.forEach(out::println);
System.out.println("--------------------");
parallel2.forEach(out::println);
}
}
jdk1.9 模块化开发
-
模块化是将java程序分解为一个一个的小程序。
-
将环境改为1.9,下载jdk1.9,进行安装,与1.8方式一样 。
jdk配置环境变量 :
系统变量
- JAVA_HOME:JDK的jdk的安装目录
- CLASS_PATH:%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
- Path:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
Path在配置的时候,需要将配置的内容置顶去掉“”
修改eclipse中的jdk的环境
- 1.9选择性的将模块中的内容暴露
- A项目需要使用 B\C 导入模块就可以
A B 不允许 A<------>B
A<------B
B<------A
将公共的,经常使用到工具类创建为模块供别人使用。