Java8新特性之lambda表达式默认接口-maye的博客

JDK 1.8 API包含了很多内建的函数式接口,在老Java中常用到的比如Comparator或者Runnable接口,这些接口都增加了@FunctionalInterface注解以便能用在lambda上,而Java8又新增了默认的函数接口,废话不多说,直接上代码:

/**
 * consumer接口:对输入的参数进行操作,有输入,但是没有输出
 * @author maye_C
 *
 */
public class ConsumerDemo {

	public static void main(String[] args) {
		
		consumerTest();
	}

	private static void consumerTest() {
		
		/**
		 * Consumer 接口表示执行在单个参数上的操作。
		 */
		Consumer<Integer> add = (v)->{
			
			System.out.println("old value:" + v);
			v += 5;
			System.out.println("new value" + v);
		};
		
		//accept方法为Cousumer接口中的方法 void accept(T t);
		add.accept(10);
	}
	
}


对于consumer接口:我就多加分析了。各位老铁看注释就行,我 相信你们这么聪明肯定已经看懂了。

/**
 * Function接口:接收一个参数,返回单一的结果,默认的方法(andthen)可以将多个函数串在一起,形成符合Function(有输入,有输出)结果。
 * 
 * @author maye_C
 *
 */
public class FunctionDemo {

	public static void main(String[] args) {
		
		//引用实例
		Function<String, Integer> toInteger = Integer::valueOf;
		//toInteger的执行结果作为第二个backString的输入
		Function<String, String> backString = toInteger.andThen(String::valueOf);
		
		
		//apply方法表示接收具体的值为参数
		String result = backString.apply("123");
		System.out.println(result);
		
		Function<Integer, Integer> add = i->{
			
			System.out.println("first input:" + i);
			return i;
		};
		Function<Integer, Integer> zero = add.andThen((i)->{
			
			System.out.println("second input:"+i);
			return i*0;
			
		});
		
		//零/any=0
		Integer res = zero.apply(10);
		System.out.println(res);
		
	}
}

下面是Predicate接口

Predicate 接口只有一个参数,返回boolean类型。该接口包含多种默认方法来将Predicate组合成其他复杂的逻辑(比如:与,或,非)

/**
 * Predicate :输入一个参数,返回一个boolean值,内置了许多用于逻辑判断的方法
 * @author maye_C
 *
 */
public class PredicateDemo {

	public void predicateTest() {
		
		Predicate<String> str = (s)->s.length()>8;
		boolean testResult = str.test("lambda");
		System.out.println(testResult);
		// 取反
		testResult = str.negate().test("lambda");//即s.length()<=8
		
		System.out.println(testResult);
		
		//-----------------------------------------------
		
		Predicate<Object> predicateObj = Objects::nonNull;
		
		Object obj = null;
		
		//判断是否为空
		testResult = predicateObj.test(obj);
		
		System.out.println(testResult);//false
		
		
		/*下面的其他api我就不演示了,读者可以自行带入*/
		Predicate<Boolean> isNull = Objects::isNull;

		Predicate<String> isEmpty = String::isEmpty;
		
		Predicate<String> isNotEmpty = isEmpty.negate();
		
	}
	
	@Test
	public void fun1() {
		
		predicateTest();
	}
}

Supplier 接口返回一个任意范型的值,和Function接口不同的是该接口没有任何参数

/**
 * Supplier接口:返回一个给定类型的接口,不需参数,无输入,有输出
 * @author maye_C
 *
 */
public class SupplierDemo {

	@Test
	public void fun1() {
		
		supplierTest();
	}

	private void supplierTest() {
		// TODO Auto-generated method stub
		
		//输出的结果为在泛型中自己指定的类
		Supplier<String> supplierStr = ()->"输出结果为字符串";
		
		String s = supplierStr.get();
		
		System.out.println(s);
		
	}
	
}
Optional 接口

Optional 不是函数是接口,这是个用来防止NullPointerException异常的辅助类型,这是下一届中将要用到的重要概念,现在先简单的看看这个接口能干什么:

Optional 被定义为一个简单的容器,这是一个值可为null的容器对象,如果值存在,isPresent方法会返回true,调用get方法会返回该对象。其值可能是null或者不是null。在Java 8之前一般某个函数应该返回非空对象但是偶尔却可能返回了null,而在Java 8中,不推荐你返回null而是返回Optional。

代码如下:
Optional<String> optional = Optional.of("meinv");

optional.isPresent();           // true
optional.get();                 // "meinv"
optional.orElse("fallback");    // "mm",如果不为null,orElse方法返回Optional实例的值,如果为null,返回传入的值。

optional.ifPresent((s) -> System.out.println(s.charAt(0)));     // "m"

Optional接口中除了这几个方法外还有其他方法:比如orElseGet、orElseThrow等,时间有限,在这里就不多加介绍了。

读到这里,大家是不是发现了还有一个Stream串口没有介绍,后面再补吧!或者会单独放在一篇博文介绍。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值