Java基础(四)

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...");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值