- 类型参数“<T>主要用于,声明泛型类或泛型方法
无界通配符“<?>”主要用于使用泛型类或泛型方法
- “<?>”通配符是拿来使用定义好的泛型的
比如用<?>声明List容器的变量类型,然后用一个实例对象给它赋值的时候就比较灵活
private static final Optional<?> EMPTY = new Optional<>();
- assert (java关键字, 需要设置断言为开启状态)
断言为真,程序将正常运行;
断言为假,异常将被JVM抛出,程序将停止,并打印这个异常信息。
int age = 17;
assert (age > 18) : "Age must be greater than 18";
...
- Optional类 防止空指针
二: 方法引用(lambda简化 ::):
- 如果lambda要表达的方案已经存在于某个方法的实现中,则可以通过::来引用作为lambda的替代者
- 要求:lambda体中方法的参数列表和返回值类型与函数式接口中对应的一样, 则可以简化.
2.1 instance :: methodName
2.2 ClassName :: staic methodName
2.3 ClassName :: instance methodName【函数式接口中抽象方法的形参列表,第一个形参是lambda体中调用方法的对象,其余的形参是这个方法的形参列表;若只有一个参数,则这个参数仍然是方法调用者的对象,方法无参数】
代码示例:
ClassName :: staic methodName
Integer[] array={10,8,5,2,23};
//lambda表达式写法
Arrays.sort(array, (i1,i2)-> Integer.compare(i1, i2));
//lambda简化,方法引用
Arrays.sort(array, Integer::compare);
System.out.println(Arrays.toString(array));
//lambda表达式写法
Supplier<Double> s1= () -> Math.random();
//lambda简化,方法引用
Supplier<Double> s1= Math::random;
System.out.println("s1 = " + s1);
ClassName :: instance methodName
//lambda表达式写法
BiPredicate<String,String> predicate= (x,y)->x.equals(y);
//lambda简化,方法引用
BiPredicate<String,String> predicate= String::equals;
System.out.println("返回的boolean " + predicate.test("abc", "ace"));
//ExcelImportError 重写了Object的toString方法
//lambda表达式写法
.map((e)->e.toString()).
//lambda简化,方法引用
.map(ExcelImportError::toString).
String errorStr =
excelImportErrorList.stream().map(ExcelImportError::toString)
.collect(Collectors.joining("<br/>"));
三:API使用:
Map:
flatMap:
reduce
计算完后又把1作为x
collect
aaaaa
总数是6