@Test
public void test5() {
ClassLoader cl = this.getClass().getClassLoader();
try (InputStream is = cl.getResourceAsStream("hello.txt");
OutputStream os = new FileOutputStream("src\\hello1.txt")) {
is.transferTo(os); // 把输入流中的所有数据直接自动地复制到输出流中
} catch (IOException e) {
e.printStackTrace();
}
}
Stream API的加强
方法
描述
takeWhile
返回从开头开始的按照指定规则尽量多的元素,碰到第一个不满足的时候终止
dropWhile
与 takeWhile 相反,返回剩余的元素
ofNullable
形参变量是可以为null值的单个元素
iterate(T seed, Predicate<? super T> hasNext,UnaryOperator next)
新增的重载的方法,新增了断言条件
@Test
public void test1(){
List<Integer> list = Arrays.asList(23, 43, 45, 55, 61, 54, 32, 2, 45, 89, 7);
//takeWhile 返回从开头开始的按照指定规则尽量多的元素
// list.stream().takeWhile(x -> x < 60).forEach(System.out::println);
//dropWhile():与 takeWhile 相反,返回剩余的元素。
list.stream().dropWhile(x -> x < 60).forEach(System.out::println);
}
@Test
public void test2(){
//of()参数中的多个元素,可以包含null值
Stream<Integer> stream1 = Stream.of(1, 2, 3,null);
stream1.forEach(System.out::println);
//of()参数不能存储单个null值,但是of()可以存储多个null值。否则,报异常
// Stream<Object> stream2 = Stream.of(null);
// stream2.forEach(System.out::println);
Integer i = 10;
i = null;
//ofNullable():形参变量是可以为null值的单个元素
Stream<Integer> stream3 = Stream.ofNullable(i);
long count = stream3.count();
System.out.println(count);
}
@Test
public void test3(){
Stream.iterate(0,x -> x + 1).limit(10).forEach(System.out::println);
//java9中新增的重载的方法
Stream.iterate(0,x -> x < 100,x -> x + 1).forEach(System.out::println);
}
Optional提供了生成stream的方法
@Test
public void test4(){
List<String> list = new ArrayList<>();
list.add("Tom");
list.add("Jerry");
list.add("Tim");
Optional<List<String>> optional = Optional.ofNullable(list);
Stream<List<String>> stream = optional.stream();
long count = stream.count();
System.out.println(count);
stream.flatMap(x -> x.stream()).forEach(System.out::println);
}
Java10
局部类型推断
类似于C++中的auto,个人觉的既然IDEA代码补全功能很强大,为了可读性尽量还是写出类型。
@Test
public void test1() {
//1.声明变量时,根据所附的值,推断变量的类型
var num = 10;
var list = new ArrayList<Integer>();
list.add(123);
//2.遍历操作
for (var i : list) {
System.out.println(i);
System.out.println(i.getClass());
}
//3.普通的遍历操作
for (var i = 0; i < 100; i++) {
System.out.println(i);
}
}
Java9部分特性钻石操作符的升级钻石操作符与匿名内部类在java 8中不能共存。在java9可以 @Test public void test2() { //钻石操作符与匿名内部类在java 8中不能共存。在java9可以。 Comparator<Object> com = new Comparator<>() { @Override public int compare(Obj