@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 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 stream1 = Stream.of(1, 2, 3,null);
stream1.forEach(System.out::println);
//of()参数不能存储单个null值,但是of()可以存储多个null值。否则,报异常
// Stream
Optional提供了生成stream的方法
@Test
public void test4(){
List list = new ArrayList<>();
list.add("Tom");
list.add("Jerry");
list.add("Tim");
Optional> optional = Optional.ofNullable(list);
Stream> 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();
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);
}
}
@Test
public void test5(){
var list1 = List.of("Java", "Python", "C");
var copy1 = List.copyOf(list1);
System.out.println(list1 == copy1); // true
var list2 = new ArrayList();
list2.add("aaa");
var copy2 = List.copyOf(list2);
System.out.println(list2 == copy2); // false
}
Java11
String新增方法
@Test
public void test1(){
// isBlank():判断字符串是否为空白,空白是指制表符,不单单空格
System.out.println(" t t n ".isBlank());
// strip():去除首尾空白
System.out.println("-----" + " t abc t n ".strip() + "-------"); //-----abc-------
System.out.println("-----" + " t abc t n ".trim() + "-------"); // -----abc-------
// stripTrailing():去除尾部空格
System.out.println("-----" + " t abc t n ".stripTrailing() + "-------");// ----- abc-------
// stripLeading():去除首部空格
System.out.println("-----" + " t abc t n ".stripLeading() + "-------");
// repeat(int count):复制字符串
String str1 = "abc";
String str2 = str1.repeat(5);
System.out.println(str2); // abcabcabcabcabc
// lines().count():行数统计
String str3 = "abcndefng";
System.out.println(str3.lines().count()); // 3
}
Optional新增的方法
方法
描述
isPresent
判断内部的value是否存在
isEmpty
判断内部的value是否为空
orElseThrow()
value非空,返回value;否则抛异常NoSuchElementException
or()
value非空,返回对应的Optional;value为空,返回形参封装的Optional
@Test
public void test2(){
var op = Optional.empty();
System.out.println(op.isPresent());
System.out.println(op.isEmpty());
op = Optional.of("abc");
var obj = op.orElseThrow();
System.out.println(obj);
Optional op1 = Optional.of("hello");
// op = Optional.empty();
Optional