Java基础知识2
2018-11-10·Java, Lambda, Stream, Generics
接口
Comparable 接口
public interface Comparable<T> {
int compareTo(T other);
}
返回正值 → 当前对象排在 other 之后;返回负数 → 当前对象排在 other 之前。
两个数值比较,建议直接用包装类的 compare 方法,可处理 NaN 和无穷大值。
Comparator 接口
public interface Comparator<T> {
int compare(T first, T second);
}
区别:Comparable 需要类亲自实现;Comparator 可由第三方实现,lambda 常用 Comparator。
Lambda 表达式
将函数表达为对象,所有函数式接口都可以用 lambda 实现。
方法引用
Arrays.sort(strings, (x, y) -> x.compareToIgnoreCase(y));
// 等价于
Arrays.sort(strings, String::compareToIgnoreCase);
三种方式:类::实例方法、类::静态方法、对象::实例方法
构造函数引用
Employee[] buttons = stream.toArray(Employee[]::new);
Stream
long count = words.stream().filter(w -> w.length() > 12).count();
Stream 与集合的区别:
- 流不存储元素
- 流操作不改变源数据
- 流操作可能是延迟的
Java 泛型
<? extends T>:上界为 T,Get First,用于消费集合元素为主的场景<? super T>:下界为 T,Put First,用于生产集合元素为主的场景
这两种特殊用法主要用在函数参数中,不直接用在逻辑代码进行元素增删。
#Java#Lambda#Stream#Generics