1、lambda表达式,延迟加载;函数式接口作为方法参数;
1.1、java.util.function包下有许多函数式接口。
@FunctionalInterface
public interface Supplier<T> {
/**
* Gets a result.
*
* @return a result
*/
T get();
}
1.2、Consumer:
import java.util.function.Consumer;
public class Test1 {
public static void main(String[] args) {
// method01("张三", (name)->System.out.println(name));
method02("hello",
(str) -> System.out.println(str.toLowerCase()),
(str) -> System.out.println(str.toUpperCase()));
}
public static void method01(String name, Consumer<String> con) {
con.accept(name);
}
public static void method02(String str, Consumer<String> con1, Consumer<String> con2) {
// con1.accept(str);
// con2.accept(str);
con1.andThen(con2).accept(str);
/*default Consumer<T> andThen(Consumer<? super T> after) {
Objects.requireNonNull(after);
return (T t) -> {
accept(t); after.accept(t);
};
}*/
}
}
1.3、Function:
@FunctionalInterface
public interface Function<T, R> {
R apply(T t);
// 组合两次转换
default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) {
Objects.requireNonNull(after);
return (T t) -> after.apply(apply(t));
}
...
1.4、泛型要求先声明,再使用:
public interface SqlSession {
<T> T getMapper(Class<T> daoInterfaceClass);
...
2、Stream流式思想:
public static void test() {
List<String> list = new ArrayList<>();
list.add("张无忌");
list.add("赵敏");
list.add("周芷若");
list.add("张三丰");
list.add("小昭");
list.stream().filter(str->str.startsWith("张"))
.filter(str->str.length()==3)
.forEach(str->System.out.println(str));
}
2.1、接口中可以有静态方法;接口方法冲突时,需要类明确该方法具体实现(一个类实现了多个接口,多个接口之间存在同名default方法);
2.2、stream流只能使用一次;
Stream.cancat() // 该静态方法可连接两个流
3、方法引用
public class Husband {
public void buyHouse() {
System.out.println("北京二环内买了套四合院!");
}
public void marry(Richable r) {
r.buy();
}
public void soHappy() {
marry(
this::buyHouse // this方法引用
);
/*marry(
()->buyHouse()
);*/
}
public static void main(String[] args) {
Husband husband = new Husband();
husband.soHappy();
4、单元测试,断言
@Test
...
Assert.assertEquals(long expected, long actual) // 断言的使用
@Before
public void init() {
System.out.println("init...");
}
// 一般用于资源的释放
@After
public void close() {
System.out.println("close...");
}